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)
Subscribe to see which companies asked this question
代码分析:
利用回溯算法,对于ip地址的每一段,每一次都从最短的长度开始取(从1到4)。注意数字从str转换成int需要减去48.我在这个点上绕了好久。以后一定要多注意。
此外,int转换为str好像是to_string(?)我也忘了。
什么是正确的ip地址我也比较迷茫。所以判断的方法写的比较乱。
代码:
class Solution {
public:
bool check(int num ,string s)
{
if((num==0 && s.size()>1)||num>255||(s[0]=='0'&&num!=0)) return false;
return true;
}
void Ipbuild(int k, string s,string s1,int t ,vector<string>& v1)
{
if(k==4 &&(t==s.size())){ v1.push_back(s1);}
else if(k<4)
{
string s2="";
int num=0;
for(int i=t;i<s.size();++i)
{
num=num*10+(int(s[i])-48);
s2+=s[i];
if(check(num,s2)){Ipbuild(k+1,s,s1+'.'+s2,i+1,v1);}
}
}
}
vector<string> restoreIpAddresses(string s) {
vector<string> v1;
if(s.size()<4 || s.size()>12) return v1;
int num=0;
string s1="";
for(int i=0;i<s.size();++i)
{
num=num*10+(int(s[i])-48);
s1=s1+s[i];
if(check(num,s1)){Ipbuild(1,s,s1,i+1,v1);}
}
return v1;
}
};