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)
将给定字符串划分为IP地址。
后来看到有三重循环做的。。。。。DFS确实蠢了。
DFS,注意不能有前导0。
class Solution {
public:
bool judge(string s)
{
if((s.size()>1 && s[0]=='0') || s.empty()) return false; //去除前导零的情况
int res=0;
for(int i=0;i<s.size();i++) res=res*10+s[i]-'0';
return (res>=0 && res<=255) ? true:false;
}
void dfs(vector<string>& res,string s,int now,string ip)
{
if(now==3)
{
if(judge(s)) res.push_back(ip+s);
return ;
}
int limit=min((int)s.size(),3);
for(int i=1;i<=limit;i++)
{
string temp=s.substr(0,i);
if(judge(temp)) dfs(res,s.substr(i),now+1,ip+temp+'.');
}
}
vector<string> restoreIpAddresses(string s) {
vector<string> res;
dfs(res,s,0,"");
return res;
}
};