Given a string containing only digits, restore it by returning all possible valid IP address combinations.
For example:
Given "25525511135"
,
return ["255.255.11.135", "255.255.111.35"]
. (Order does not matter)
class Solution { public: void visit(string &s, int num, int len, int begin, vector<string> &result, int *dotPos) { if (begin >= len) { return; } if (num == 3) { if (len-begin > 3 || (len-begin != 1 && s[begin] == '0') || (len-begin == 3 && s.substr(begin, 3) > "255")) { return; } string temp; int left = 0; for (int i = 0; i < 3; i++) { temp += s.substr(left, dotPos[i]-left) + '.'; left = dotPos[i]; } temp += s.substr(left, len-left); result.push_back(temp); return; } else { for (int i = 1; i < 4; i++) { if (begin+i >= len) { continue; } if ((i != 1) && s[begin] == '0'|| (i == 3 && s.substr(begin, 3) > "255")) { continue; } dotPos[num] = begin + i; visit(s, num+1, len, dotPos[num], result, dotPos); } } } vector<string> restoreIpAddresses(string s) { vector<string> result; int len = s.length(); if (len < 4 || len > 12) { return result; } int dotPos[3]; visit(s, 0, len, 0, result, dotPos); return result; } };