问题:
给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。
示例:
输入: “25525511135”
输出: [“255.255.11.135”, “255.255.111.35”]
思路:
这个题可以类似想成字符串分割问题,字符串必须分成四段,而且每段的字符必须符合以下要求:
1)必须小于等于255
2)除了单独的0,不能以0开头,如“025”不可以
代码:`
public class Solution
{
IList<string> res;//缓存符合要求的IP地址
//入口函数
public IList<string> RestoreIpAddresses(string s)
{
res = new List<string>();
//开始递归
startFind(s,"",0);
return res;
}
void startFind(string s,string ip,int n)
{
//到达最后一个节点
if(n==4)
{
if(String.IsNullOrEmpty(s))
res.Add(ip.Substring(0,ip.Length-1));
return;
}
//此节点无法再分
if (s.Length == 0) return;
//此节点可用情况下推到下一个节点
if(s[0] == '0')//首字母为零,必须此位为零
{
startFind(s.Substring(1, s.Length - 1), ip + "0.", n + 1);
return;
}
for(int i=1;i<4;i++)
{
if (s.Length < i) break;
if (!IsOk(s.Substring(0, i))) break;
startFind(s.Substring(i, s.Length-i), ip + s.Substring(0, i) + ".", n + 1);
}
}
bool IsOk(string str)
{
if(int.Parse(str) <= 255)
return true;
else
return false;
}
}`