zoukankan      html  css  js  c++  java
  • Restore IP Addresses -- LeetCode

    原题链接: http://oj.leetcode.com/problems/restore-ip-addresses/ 
    这道题的解法很接近于NP问题。也是採用递归的解法。

    基本思路就是取出一个合法的数字,作为IP地址的一项,然后递归处理剩下的项。能够想象出一颗树,每一个结点有三个可能的分支(由于范围是0-255,所以能够由一位两位或者三位组成)。而且这里树的层数不会超过四层,由于IP地址由四段组成,到了之后我们就不是必需再递归下去。能够结束了。这里除了上述的结束条件外,还有一个就是字符串读完了。能够看出这棵树的规模是固定的。不会像寻常的NP问题那样,时间复杂度取决于输入的规模。是指数量级的,所以这道题并非NP问题,由于他的分支是四段。有限制。代码例如以下:

    public ArrayList<String> restoreIpAddresses(String s) {
        ArrayList<String> res = new ArrayList<String>();
        if(s==null || s.length()==0)
            return res;
        helper(s,0,1,"",res);
        return res;
    }
    private void helper(String s, int index, int segment, String item, ArrayList<String> res)
    {
        if(index>=s.length())
            return;
        if(segment == 4)
        {
            String str = s.substring(index);
            if(isValid(str))
            {
                res.add(item+"."+str);
            }
            return;
        }
        for(int i=1;i<4&&(i+index<=s.length());i++)
        {
            String str = s.substring(index, index+i);
            if(isValid(str))
            {
                if(segment==1)
                    helper(s,index+i,segment+1,str,res);
                else
                    helper(s,index+i,segment+1,item+"."+str,res);
            }
        }
    }
    private boolean isValid(String str)
    {
        if(str==null || str.length()>3)
            return false;
        int num = Integer.parseInt(str);
        if(str.charAt(0)=='0' && str.length()>1)
            return false;
        if(num>=0 && num<=255)
            return true;
        return false;
    }
    实现中须要一个推断数字是否为合法ip地址的一项的函数,首先要在0-255之间,其次前面字符不能是0。

    剩下的就是NP问题的套路了,递归中套一个for循环,不熟悉的朋友能够看看N-Queens哈。

  • 相关阅读:
    定制事件 观察者模式
    定时器的高级运用 优化
    tamper-proof 对象 nonextensible对象 sealed对象 frozen对象
    函数柯理化
    跨域 Ajax 其他可选技术 异步
    Ajax 跨域 异步 CORS
    原样输出html标签
    JavaScript
    css 中name的用途
    iview 按需引入解决加载慢的问题
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/7261323.html
Copyright © 2011-2022 走看看