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:
vector<string> restoreIpAddresses(string s) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<string> res;
vector<int> vec;
if(s.length() < 4) return res;
DFS(0,0,s,res,vec);
return res;
}
bool isCorrectIP(string s)
{
if(s.length() <= 0 || s.length() > 4) return false;
if(s.length() > 1 && s[0] == '0') return false;
int b=atoi(s.c_str());
if(b <= 255 && b >= 0) return true;
return false;
}
void DFS(int start,int k,string s,vector<string>& res,vector<int>& vec)
{
if(k == 3){
if(isCorrectIP(s.substr(start))){
for(int j = 0;j < vec.size();j++)
s.insert(vec[j]+j,".");
res.push_back(s);
}
vec.pop_back();
return;
}
int limit = min(3,(int)s.length()-start);
for(int i = 1;i <= limit ;i++)
{
if(start+i >= s.length()) break;
if(!isCorrectIP(s.substr(start,i))) break;
vec.push_back(start+i);
DFS(start+i,k+1,s,res,vec);
}
if(!vec.empty()) vec.pop_back();
}
};
20 milli secs .