class Solution {
public List<String> restoreIpAddresses(String s) {
//准备结果集合
List<String> result = new LinkedList<>();
//递归求解
backcheck(s,0,"",0,"",result);
//返回结果
return result;
}
public void backcheck(String s,int index,String ip,int segI,String seg,List<String> result){
//设置递归退出的条件
if(index == s.length() && segI == 3 && isVal(seg)){
result.add(ip + seg);
}else if(index < s.length() && segI <= 3){//只有当前段小于等于3,并且没有到字符串末尾才有接着递归的必要相当于剪枝操作
//为了遍历当前段的所有可能情况,当当前字符符合放入当前段的条件时放入
char c = s.charAt(index);
if(isVal(seg + c)){
backcheck(s,index + 1,ip,segI,seg + c,result);
}
//如果当前的seg符合条件就当作时一段来处理接着遍历下一段的可能性
if(seg.length() > 0 && segI < 3){
backcheck(s,index + 1,ip + seg + ".",segI + 1,"" + c,result);
}
}
}
//判断ip的一段是否符合条件
public boolean isVal(String seg){
return Integer.valueOf(seg) <= 255 && (seg.equals("0") || seg.charAt(0) != '0');
}
}
复原ip地址java实现
最新推荐文章于 2024-03-29 22:28:13 发布