zoukankan      html  css  js  c++  java
  • [leedcode 93] Restore IP Addresses

    Given a string containing only digits, restore it by returning all possible valid IP address combinations.

    For example:
    Given "25525511135",

    return ["255.255.11.135", "255.255.111.35"]. (Order does not matter)

    public class Solution {
        List<String> res;
        StringBuilder seq;
        public List<String> restoreIpAddresses(String s) {
        /*  采用递归的解法。基本思路就是取出一个合法的数字,作为IP地址的一项,然后递归处理剩下的项。
            可以想象出一颗树,每个结点有三个可能的分支(因为范围是0-255,所以可以由一位两位或者三位组成)。
            并且这里树的层数不会超过四层,因为IP地址由四段组成,到了之后我们就没必要再递归下去,可以结束了。
            递归结束的条件是遍历完4段,字符串也恰好读完了。可以看出这棵树的规模是固定的,
            时间复杂度取决于输入的规模,是指数量级的,所以这道题并不是NP问题,因为他的分支是四段,有限制。*/
    
            res=new ArrayList<String>();
            seq=new StringBuilder();
            getIpAddress(s,0,1);//index  segment
            return res;
        }
        public void getIpAddress(String s,int index,int seg){
            if(seg>4){//递归截止的条件,大于4段,并且不存在多余的字符
                if(index==s.length()){
                    res.add(new String(seq));
                }
                return;
            }
            
            for(int i=1;i<4&&(index+i)<=s.length();i++){//DFS,注意要删除seq的值
                String temp=s.substring(index,index+i);
                if(isvalid(temp)){
                    if(seg==1){
                        seq.append(temp);
                    }else{
                        seq.append("."+temp);
                    }
                    getIpAddress(s,index+i,seg+1);
                    int t=seg==1?0:1;
                    seq.delete(seq.length()-i-t,seq.length());
                }
            }
                   
        }
        public boolean isvalid(String s){//验证每一段是否满足要求,不能是“01”,不能大于三位,范围在0 到255
            if(s==null||s.length()>3) return false;
            if(s.length()>1&&s.charAt(0)=='0') return false;
            int temp=Integer.parseInt(s);/////
            if(temp>=0&&temp<=255) return true;
            return false;
        }
    }
  • 相关阅读:
    Selenium生成Report的利器- ExtentReports
    学习使用monkey 测试
    charles 结合mocky 模拟数据
    Vue.use()源码分析且执行后干什么了
    commonjs 与 es6相关Module语法的区别
    vue函数化组件 functional
    html5细线表格制作
    移动端H5页面禁止长按复制和去掉点击时高亮
    javascript生成器
    promise和生成器的结合
  • 原文地址:https://www.cnblogs.com/qiaomu/p/4651777.html
Copyright © 2011-2022 走看看