problem:
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)
thinking:
(1)IP格式要求:4段,每段位数最多3位,数值0~255,最少1位,1位可以为0,但是2 、3位时不能以0开头
(2)要输出IP,所以采用DFS深搜,深搜步数是固定的4步,每次可以获取字符串的1~3位来搜索。
code:
class Solution {
private:
vector<string> ret;
public:
vector<string> restoreIpAddresses(string s) { int n=s.size();
string str;
dfs(1,0,0,n,s,str);
dfs(1,0,1,n,s,str);
dfs(1,0,2,n,s,str);
return ret;
}
protected:
void dfs(int step, int start, int end, int size,string s, string str)
{
if(end>=size)
return;
if(step==4)
{
if(end==size-1)
{
string tmp=s.substr(start,end-start+1);
if(check(tmp))
ret.push_back(str+tmp);
}
return;
}
string tmp=s.substr(start,end-start+1);
if(check(tmp))
{
str=str+tmp+".";
dfs(step+1,end+1,end+1,size,s,str);
dfs(step+1,end+1,end+2,size,s,str);
dfs(step+1,end+1,end+3,size,s,str);
}
}
bool check(string &str)
{
int n=str.size();
if(n<1 || n>3)
return false;
if(n==1)
return true;
if(n==2)
{
if(str.at(0)=='0')
return false;
else
return true;
}
if(n==3)
{
if(str.at(0)=='0')
return false;
if(str>string("255"))
return false;
else
return true;
}
}
};leetcode || 93、 Restore IP Addresses
原文地址:http://blog.csdn.net/hustyangju/article/details/45061655