Leetcode OJ : Restore IP Addresses backtrack暴搜 C++ solution

 1 class Solution {
 2     public:
 3     vector<string> ret;
 4     string src;
 5     int len;
 6     unordered_set<string> added;
 7     vector<string> restoreIpAddresses(string s) {
 8         if ( s.empty() )  return ret;
 9         src = s;
10         len = src.size();
11         backTrack(0,0,  "");
12         return ret;
13     }
14 
15     void backTrack(int pos, int dot_cnt, string substr) {
16         if ( dot_cnt > 4 ) return;
17         if ( pos >= len && dot_cnt == 4 ) {
18             substr.pop_back();
19             if ( added.find(substr) == added.end() ) {
20                 ret.push_back( substr );
21                 added.insert( substr );
22             }
23             return;
24         }
25         char buffer[16];
26         int tx = len - pos > 3 ? 3 : len - pos;
27         for ( int i = 1; i <= tx; i++ ) {
28             string temp = src.substr( pos, i );
29             int number = atoi( temp.c_str() );
30             sprintf( buffer, "%d", number );
31             string str(buffer);
32             if ( str != temp ) continue;
33             string newsub = substr + temp + ".";
34             if ( number >= 0 && number <= 255 ) {
35                 backTrack( pos + i, dot_cnt + 1,  newsub );
36             }
37         }
38     }
39 };
原文地址:https://www.cnblogs.com/ydlme/p/4295719.html