题目描述
题解
和17的思路基本是一样的,主要多了几个判定条件
除了单个要小于256,还有就是不能出现01,010这种
import java.util.*;
public class Leetcode_93 {
public List<String> restoreIpAddresses(String s) {
List<String> ret = new ArrayList<>();
if(s.length()<4)
return ret;
findIp("",s,0,ret,0);
return ret;
}
private void findIp(String strr, String s, int offset, List<String> ret,int i)
{
System.out.println(strr);
if(offset>=4)
{
if(strr.length() == (s.length()+3))
{
ret.add(strr);
return;
}
else
{
return;
}
}
for(int j = 1;j<=3;j++)
{
if(i+j<=s.length()&&Integer.parseInt(s.substring(i,i+j))<256&&String.valueOf(Integer.parseInt(s.substring(i,i+j))).equals(s.substring(i,i+j))) {
if (strr.length() == 0)
findIp(strr + s.substring(i, i + j), s, offset + 1, ret, i + j);
else
findIp(strr + "." + s.substring(i, i + j), s, offset + 1, ret, i + j);
}
}
}
public static void main(String[] args)
{
Leetcode_93 a = new Leetcode_93();
String s = "010010";
List<String> ret = a.restoreIpAddresses(s);
System.out.println(ret.toString());
}
}