0
点赞
收藏
分享

微信扫一扫

回溯算法leetcode.93

seuleyang 2022-02-21 阅读 55
 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 条评论