0
点赞
收藏
分享

微信扫一扫

回溯算法leetcode.93

seuleyang 2022-02-21 阅读 54
 public static List<String> restoreIpAddresses(String s) {
List<String> ans=new ArrayList<>();
backtrack(s,ans,new StringBuffer(s),0,0);//num为插入点数量
return ans;
}
public static void backtrack(String s,List<String> ans,StringBuffer ip,int idx,int num){
if(num==3)
{
if(isValid(idx,s.length(),s))//当插入3个点后,最后一个数字有效则加入
ans.add(new String(ip));
return;
}
//i在原字符串中遍历
for (int i = idx; i < s.length(); i++) {
//数字有效可以插入
if(isValid(idx,i+1,s))
{
ip.insert(i+1+num,".");//插入时,需要考虑已经插入点的数量
backtrack(s,ans,ip,i+1,num+1);//进入下一层,idx需要+1
ip.replace(i+1+num,i+2+num,"");//复原
}


}
}
public static boolean isValid(int begin,int end,String s){
if(begin>=end||s.charAt(begin)=='0'&&end-begin>=2)
return false;
if(Long.parseLong(s.substring(begin,end))>255)
return false;
return true;
}
举报

相关推荐

0 条评论