Restore IP Addresses
Aug 8 '12
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
// Given "25525511135",
// ["255.255.11.135", "255.255.111.35"]
vector<string> res;
string temp;
ipRec(res, temp, s, 0, 0);
return res;
}
private:
void ipRec(vector<string>& res, string& temp, string& s, int level, int index) {
if(level==4) {
if(index==s.length()) {
temp.pop_back();
res.push_back(temp);
}
return;
}
string t;
for(int i=0; i<3; i++) {
t.push_back(s[index+i]);
if(!isValid(t)) continue;
temp.append(t);
temp.push_back('.');
ipRec(res, temp, s, level+1, index+i+1);
temp.pop_back();
}
}
bool isValid(string s) {
if(s.length()<1 || s.length()>3) return false;
if(s.length()==3 && s[2]==0) return false;
if(s.length()==2 && s[1]==0) return false;
int x=atoi(s.c_str());
if( x>=0 && x<=255) return true;
else return false;
}
};