查看: 1360| 回复: 4
跳转到指定楼层
上一主题 下一主题
收起左侧

[Leetcode] 请教Restore IP Addresses题

全局:

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

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

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

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

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

有用给我加米啊

评分

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

查看全部评分

回复

使用道具 举报

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

评分

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

查看全部评分

回复

使用道具 举报

🔗
 楼主| 小水 2020-2-15 03:44:09 | 只看该作者
全局:
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()跳过这种情况是吗
回复

使用道具 举报

🔗
XiaoTangmen 2020-2-16 15:23:03 | 只看该作者
全局:
小水 发表于 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 很有用的信息!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

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