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哈。

  • 相关阅读:
    类的创建
    线性规划
    break、continue、pass介绍
    array numpy 模块
    hive字符串函数
    进化的Spark, 从DataFrame说起
    hive sql split 分隔符
    Spark On YARN内存分配
    浅谈Spark应用程序的性能调优
    Spark-Mllib(二)基本统计
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/7261323.html
Copyright © 2011-2022 走看看