1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| class Solution { public: bool isVaild(string s, int start, int end){ int sum = 0; if(end-start>2) return false; for(int i=start; i<=end; i++){ if(s[i]-'0'>9 || s[i]-'0'<0) return false; else{ sum *= 10; sum += s[i]-'0'; } } if(end-start == 0 && s[start]-'0' == 0) return true; else if(end-start > 0 && s[start]-'0' == 0) return false; else if(sum > 0 && sum <= 255) return true; else return false; }
vector<string> result;
void backtracking(string s, int startpoint, int pointSum){ if(pointSum == 3){ if(isVaild(s, startpoint, s.size()-1)){ result.push_back(s); } return; } for(int i=startpoint; i<s.size(); i++){ if(isVaild(s, startpoint, i)){ s.insert(s.begin()+i+1, '.'); pointSum++; backtracking(s, i+2, pointSum); pointSum--; s.erase(s.begin()+i+1); } else continue; } }
vector<string> restoreIpAddresses(string s) { if(s.size() < 4 || s.size() > 12) return result; backtracking(s, 0, 0); return result; } };
|