`
bcyy
  • 浏览: 1937327 次
文章分类
社区版块
存档分类
最新评论

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哈。
分享到:
评论

相关推荐

    python-leetcode题解之093-Restore-IP-Addresses

    "Restore IP Addresses"是LeetCode上一个有趣且具有挑战性的算法题目,它不仅考查了编程者对字符串处理的能力,还考查了回溯算法以及IP地址知识的理解。正确解决这个问题需要综合运用多种编程技巧,并且要求编码者在...

    js-leetcode题解之93-restore-ip-addresses.js

    此篇文档的主题是关于JavaScript实现的LeetCode第93题“restore-ip-addresses”的解题策略和代码实现。 首先,我们需要理解题目“restore-ip-addresses”的要求。题目要求我们根据给定的字符串,复原所有可能的有效...

    c语言-leetcode题解之0093-restore-ip-addresses.zip

    在给定的压缩包文件中,包含了一个具体的C语言源文件,名为"0093_restore_ip_addresses",该文件显然是针对LeetCode上编号为0093的“Restore IP Addresses”问题的题解代码。开发者在解决这个问题的过程中,不仅要...

    leetcode盒子嵌套-leetcode-text:leetcode-文本

    leetcode-text 92.Reverse Linked List II Runtime: 4 ms, faster than 67.04% of C online submissions for Reverse Linked List II. Memory Usage: 6.9 MB, less than 100.00% of C online submissions for ...

    leetcode怎么计算空间复杂度是指-LeetCode-Solution:我的第一个LeetCode解决方案

    LeetCode-Solution my first solution of LeetCode 2015-5-7 Problem 95,98(80 already!) 我经常在递归的结束地方忘记return!!! 题型一:经典暴力递归:(里面涉及到重复不重复的时候,需要注意该如何处理!) 模板...

    leetcode字符串括号level-leetcode:LeetCode解题记录

    restoreIPAddresses 复原IP地址 threeSum 三数之和 search 搜索旋转排序数组 1. 3. 9. 75. 209. 219. 167. 268. 344. 349. 454. 447. 695. 674. string 字符串 20. 150. linklist 链表 19. 24. 86. 92. 203. 206. ...

    leetcode卡-arts:每周输出:Algorithm+Review+Tip+Share

    Algorithm:restore-ip-addresses(递归) Review:redis sentinel conf Tip:redis查看主从同步是否完成 Share:学习总结 - docker的基本使用 第一周 Algorithm:reverse-linked-list-ii(链表) Review:linux编程...

    leetcode卡-LeetCodeMing:ARTS之Leetcode记录

    leetcode卡 LeetCodeMing 记录自己日常刷题LeetCode的点滴,技术改变世界,FOR ...93.Restore IP Addresses [官网链接] () Array 1.Two Sum 15.3Sum 16.3Sum Closest 18.4Sum Other 306.Additive Number [官网链接] ()

    LeetCode 93. 复原IP地址.docx

    public List&lt;String&gt; restoreIpAddresses(String s) { List&lt;String&gt; list = new ArrayList(); int len; if (s == null || (len = s.length()) || len &gt; 12) { return list; } for (int i = 0; i ; i++) { ...

    Coding Interview In Java

    leetcode Java 246 題目及解答 (英文) Contents 1 Rotate Array in Java 15 2 Reverse Words in a String II 19 ...243 Restore IP Addresses 589 244 Reverse Integer 591 245 Palindrome Number 593

    手稿_V1.17

    `restoreIpAddresses` 是主入口,它初始化结果集合并调用 `helper` 函数开始搜索。 2. 在 `helper` 函数中,我们进行递归调用或循环迭代,对于每种可能的子串长度(1, 2, 或 3),检查其是否满足条件并进行处理。 3....

    手稿_V1.032

    `Solution`类有一个公共成员函数`restoreIpAddresses`,它接收一个字符串`s`作为参数,用于恢复可能的IP地址。同时,还定义了一个私有辅助函数`helper`,用于递归处理字符串`s`来构造IP地址。 2. **递归算法**:`...

    复原IP地址1

    def restoreIpAddresses(self, s: str) -&gt; List[str]: s_len = len(s) res = [] if s_len &lt; 4 or s_len &gt; 12: return res path = [] self.dfs(s, s_len, 0, 0, path, res) return res def dfs(self, s, ...

Global site tag (gtag.js) - Google Analytics