class Solution {
public:
vector<string> ret;
vector<string> sln;
int stoi(string s) {
int n = s.size();
if (n >= 2 && s[0] == '0') return 256;
int ret = 0;
for (int i = 0; i < n; i++) {
ret = ret * 10 + s[i] - '0';
}
return ret;
}
void recursion(string s, int pos, int n) {
if (n == 4 && pos == s.size()) {
string result = "";
for (int i = 0; i < 3; i++)
result += sln[i] + ".";
result += sln[3];
ret.push_back(result);
}
if (n == 4 || pos >= s.size()) return;
for (int i = 1; i <= 3; i++) {
string part = s.substr(pos, i);
int val = stoi(part);
if (val > 255) {
continue;
} else {
sln.push_back(part);
recursion(s, pos + i, n + 1);
sln.pop_back();
}
}
}
vector<string> restoreIpAddresses(string s) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
ret.clear();
recursion(s, 0, 0);
return ret;
}
};
Small Case: 8ms
Large Case: 24ms
Time: O(3^n)
Space: O(n)