题目
给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。
示例:
输入: “25525511135”
输出: [“255.255.11.135”, “255.255.111.35”]
算法
public class P93 {
List<String> rList = new ArrayList<>();
public List<String> restoreIpAddresses(String s) {
if(s.length()<4){
return rList;
}
split(s,0,1);
return rList;
}
private void split(String s,int l,int seg){
if(seg!=4){
for(int i = 1;i<=3;i++){
if(l+i<=s.length()){
int sub = Integer.parseInt(s.substring(l,l+i));
if(sub>=0&&sub<256){
StringBuilder sb = new StringBuilder(s);
sb.insert(l+i,'.');
split(sb.toString(),l+i+1,seg+1);
}
if(sub==0){
break;
}
}else {
break;
}
}
}else if(seg==4&&l<s.length()&&s.length()-l<=3){
if(Integer.parseInt(s.substring(l,s.length()))<256&&!((s.length()-l)>1&&s.charAt(l)=='0'))
rList.add(s);
}
}
}
思路:
- 采用了递归的思想
- IP地址一共分成四段,每一段长度为最小为1,最大为3,同层从1遍历到3
- 递归层(递进层)则是上一层插入分割点的字符串
- 回溯的找到符合的解