一亩三分地

 找回密码 注册账号

扫描二维码登录本站


北美版丁香园
美国和加拿大
疫情地图实时动态追踪

热门职场讲座
Career in Tech
职场晋升之路

Salarytics=Salary Analytics
查询工资数据
系统自动计算每年收入

科技公司如何
用数据分析驱动产品开发
coupon code 250off 立减$250
游戏初创公司招聘工程师、UIUX Designer和游戏策划
坐标湾区
DreamCraft创始团队
招聘游戏开发工程师
查看: 402|回复: 4
收起左侧

[Leetcode] 请教Restore IP Addresses题

[复制链接] |试试Instant~ |刷题, leetcode
我的人缘0

分享帖子到朋友圈
小水 | 显示全部楼层 |阅读模式
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (37)
 
 
0% (0)    👎

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?注册账号

x
楼主每当遇到recursion题,跑test case的时候,基本上都会绕晕。不知道各位大神有什么理清recursion思路的建议。比如这道restore IP addresses的题,在网上找到了如下code解法:
[Java] 纯文本查看 复制代码
class Solution {
    public List<String> restoreIpAddresses(String s) {
        List<String> res = new ArrayList<String>();
        helper(s, 0, "", res);
        return res;   
    }
    public void helper(String s, int n, String out, List<String> res){
        if(n == 4){
            if(s.isEmpty()) res.add(out);
            return;
        }
        for(int k = 1; k < 4; k++){
            if(s.length() < k) break;
            int val = Integer.parseInt(s.substring(0,k));
            if(val > 255 || k != String.valueOf(val).length()) continue;
            helper(s.substring(k), n + 1, out + s.substring(0, k) + (n == 3? "": "."), res);
        }
    }
}

对于第15行中的k != String.valueOf(val).length()条件,实在想不明白,请大家指点一下这个条件的作用。

上一篇:R请教,R大牛们请进
下一篇:亚麻经理诚招Software Engineer (Seattle)
我的人缘0
randallhong 2020-2-14 14:18:11 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   97% (156)
 
 
2% (4)    👎
这个k != String.valueOf(val).length() 是为了当prefix 0 存在的时候。防止加上duplicate的ip。
比如10111,分开可以分开成1:1:1:1,但是如果没这个条件,会存在多个这样的ip.因为他是来自于1:01:1:1。

有用给我加米啊

评分

参与人数 1大米 +1 收起 理由
小水 + 1 很有用的信息!

查看全部评分

回复

使用道具 举报

我的人缘0
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (12)
 
 
0% (0)    👎
递归的题目建议画树状图理清思路,节点是状态,边是动作,递归就是深度+1,回溯就是深度-1。
这题从根结点空字符串开始,每次选择合法的1个或2个或3个数字构造ip地址,因为ip地址由4个整数组成,所以限定深度为4,当深度刚好为4且当前构造的ip地址与题目给的相符,结束DFS。

评分

参与人数 1大米 +1 收起 理由
小水 + 1 给你点个赞!

查看全部评分

回复

使用道具 举报

我的人缘0
 楼主| 小水 2020-2-15 03:44:09 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (37)
 
 
0% (0)    👎
randallhong 发表于 2020-2-14 14:18
这个k != String.valueOf(val).length() 是为了当prefix 0 存在的时候。防止加上duplicate的ip。
比如1011 ...

谢谢解答,就是说Integer.parseInt()会把“01”,变成1,用k!=String.valueOf(val).length()跳过这种情况是吗
回复

使用道具 举报

我的人缘0
XiaoTangmen 2020-2-16 15:23:03 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (2)
 
 
0% (0)    👎
小水 发表于 2020-2-14 11:44
谢谢解答,就是说Integer.parseInt()会把“01”,变成1,用k!=String.valueOf(val).length()跳过这种情况 ...

这句话就是防止这种情况,“01”不合规则,不可以变成“1”。这句话也可以写成:

String s1 = s.substring(0,k);
if (val >255 || (s1.length() >1 and s1.charAt(0) == '0')) continue;

评分

参与人数 1大米 +1 收起 理由
小水 + 1 很有用的信息!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

隐私提醒:
■为防止被骚扰甚至人肉,不要公开留微信等联系方式,请以论坛私信方式发送。
■特定版块可以超级匿名:https://pay.1point3acres.com/tools/thread
■其他版块匿名方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

手机版|||一亩三分地

GMT+8, 2020-4-2 01:04

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表