Given a string containing only digits, restore it by returning all possible valid IP address combinations.
For example:
Given
return
Analysis:For example:
Given
"25525511135"
,return
["255.255.11.135", "255.255.111.35"]
. (Order does not matter)There's no specific algorithm used in this problem. I loop through all the possible positions to add dots.
A value IP address is defined such that each three-digits segment is valued between 0 and 255, inclusive. A corner case is that each segment should begin with non-zero digits, i.e., xx.013.xxx.xxx is not a valid segmentation as 013 is invalid.
Code:
class Solution { public: vector<string> restoreIpAddresses(string s) { vector<string> out; if (s.size()<4 || s.size()>12) return out; // loop thru all possible positions for adding "." for (int i=0; i<s.size()-3; i++) { for (int j=i+1; j<s.size()-2; j++) { for (int k=j+1; k<s.size()-1; k++) { int a=atoi(s.substr(0,i+1).c_str()); string t=to_string(a); if (t!=s.substr(0,i+1)) continue; // to eliminate case where starts with 0
int b=atoi(s.substr(i+1,j-i).c_str()); t=to_string(b); if (t!=s.substr(i+1,j-i)) continue;
int c=atoi(s.substr(j+1,k-j).c_str()); t=to_string(c); if (t!=s.substr(j+1,k-j)) continue;
int d=atoi(s.substr(k+1,s.size()-k).c_str()); t=to_string(d); if (t!=s.substr(k+1,s.size()-k)) continue;
if (a<=255 && b<=255 && c<=255 && d<=255) out.push_back(s.substr(0,i+1)+"."+s.substr(i+1,j-i)+"."+s.substr(j+1,k-j)+"."+s.substr(k+1,s.size()-k)); } } } return out; } };
No comments:
Post a Comment