Given a string containing only digits, restore it by returning all possible valid IP address combinations.

For example:
Given "25525511135",

return ["255.255.11.135", "255.255.111.35"]. (Order does not matter)


题解:深度优先搜索。用result存放得到的每个小数点之间的字符串,在递归函数 private void restoreIpRecur(String s,List<String> answer,ArrayList<String> result){ 中每次从s的头取1个,2个和3个(如果能取到,注意边界判断)组成一个数字,如果该数字在0~255之间(且不是00),就存入result中备用,然后递归的在s剩下的子串里面搜索后面的数字。

递归终止条件:

  • result列表中有四个数字,并且s正好变成空串,说明result中存放的4个数字可以组成一组ip地址,把它存入answer中;
  • result列表中有大于或者等于4个数字,但s不为空,说明将s分成了4段以上,不符合规则,return。

代码如下:

 1 public class Solution {
 2     private boolean isValidIp(String ip){
 3         if(ip.charAt(0) == '0')
 4             return ip.equals("0");
 5         int digit = Integer.valueOf(ip);
 6         return digit >= 0 && digit <= 255;
 7     }
 8     private void restoreIpRecur(String s,List<String> answer,ArrayList<String> result){
 9         //result has more than four numbers but s is not empty, means we sperate s to more than 4 numbers
10         if(result.size()>=4 && !s.isEmpty())
11             return;
12         if(s.equals("")){
13             //if we sperate s exactly four valid numbers
14             if(result.size()==4){
15                 //found one IP
16                 String ip = new String();
17                 for(String ss:result)
18                     ip = ip + ss + ".";
19                 ip = ip.substring(0,ip.length()-1);
20                 answer.add(ip);
21             }
22             else {
23                 return;
24             }
25         }
26         //get 1,2,3 characters from s's head and put it into result,search what's left in s recursively
27         for(int i = 1;i<=3&&i<=s.length();i++){
28             String sub = s.substring(0,i);
29             if(isValidIp(sub)){
30                 result.add(sub);
31                 restoreIpRecur(s.substring(i), answer, result);
32                 result.remove(result.size()-1);
33             }
34         }
35         return;
36     }
37     public List<String> restoreIpAddresses(String s) {
38         ArrayList<String> answer = new ArrayList<String>();
39         ArrayList<String> result = new ArrayList<String>();
40         restoreIpRecur(s, answer, result);
41         return answer;
42
43     }
44 }

转载于:https://www.cnblogs.com/sunshineatnoon/p/3868217.html

【leetcode刷题笔记】Restore IP Addresses相关推荐

  1. 卷进大厂系列之LeetCode刷题笔记:二分查找(简单)

    LeetCode刷题笔记:二分查找(简单) 学算法,刷力扣,加油卷,进大厂! 题目描述 涉及算法 题目解答 学算法,刷力扣,加油卷,进大厂! 题目描述 力扣题目链接 给定一个 n 个元素有序的(升序) ...

  2. LeetCode刷题笔记2——数组2

    LeetCode刷题笔记2--数组2 重塑数组 题目 在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原 ...

  3. 小何同学的leetcode刷题笔记 基础篇(01)整数反转

    小何同学的leetcode刷题笔记 基础篇(01)整数反转[07] *** [01]数学取余法*** 对数字进行数位操作时,常见的方法便是用取余的方法提取出各位数字,再进行操作 操作(1):对10取余 ...

  4. LeetCode刷题笔记汇总

    LeetCode刷题笔记汇总 第一次刷LeetCode写的一些笔记. 1.两数之和 3.无重复字符的最长子串 15.三数之和 18.四数之和 19.删除链表的倒数第 N 个结点 20.有效的括号 21 ...

  5. 【leetcode刷题笔记】动态规划

    #[leetcode刷题笔记]动态规划 石子游戏 public boolean stoneGame(int[] piles) {int N = piles.length;// dp[i][j] is ...

  6. LeetCode刷题笔记-动态规划-day4

    文章目录 LeetCode刷题笔记-动态规划-day4 55. 跳跃游戏 1.题目 2.解题思路 3.代码 45. 跳跃游戏 II 1.题目 2.解题思路 3.代码 LeetCode刷题笔记-动态规划 ...

  7. LeetCode刷题笔记- 15.三数之和

    LeetCode刷题笔记- 15.三数之和 C语言 题目 注意点 C语言 /*** Return an array of arrays of size *returnSize.* The sizes ...

  8. LeetCode刷题笔记第6题:Z字形变换

    LeetCode刷题笔记第6题:Z字形变换 想法: 要完成字符串根据给定的行数从上往下,从左到右完成Z字形排列.当只有一行时直接返回原字符串,当行数大于1时,先以行数构建一个行数数值个空字符串的列表, ...

  9. leetcode刷题笔记——二分查找

    leetcode刷题笔记--二分查找 目前完成的贪心相关的leetcode算法题序号: 中等:80,81 困难:4 来源:力扣(LeetCode) 链接:https://leetcode-cn.com ...

  10. LeetCode刷题笔记(算法思想 四)

    LeetCode刷题笔记(算法思想 四) 七.动态规划 斐波那契数列 70. 爬楼梯 198. 打家劫舍 213. 打家劫舍 II 信件错排 母牛生产 矩阵路径 64. 最小路径和 62. 不同路径 ...

最新文章

  1. 嵌入式软件设计第12次实验报告-140201235-陈宇
  2. Gateway internal_length debug with Sara Zhang
  3. java的jdbc驱动server_win7下java用jdbc驱动来连接sql server的方法 (转载)
  4. vue 字典_【开源】基于Vue的前端组件库HeyUI
  5. php解析xml数据格式,PHP解析xml格式数据工具类实例分享
  6. 验证登陆信息的合法性
  7. 万智牌天使恩典oracle,#诡局#诡局机制
  8. 一起学习x86/x64知识(一)
  9. xcap工具使用心得
  10. C++编写COM组件 ATL工程
  11. 12306网站专家:拟采取办法应对抢票软件
  12. 基于FPGA的LED全彩图形显示控制器设计
  13. 硬盘RAID是什么意思?有什么用?
  14. edge扩展下载失败解决办法
  15. 使用Word制作文档封面
  16. 微信严正提醒!再做这件事,封号处理
  17. 前程无忧助力,再次举办湖北武汉网络专场招聘会
  18. 【Introduction to Artificial Intelligence and Data Analytics】(TBC)
  19. 放大电路基本性能指标
  20. Base64转码和字符串互转

热门文章

  1. zookeeper启动后查看状态的Error contacting service. It is probably not running.错误
  2. 任意切换线程的工具类
  3. c++怎么可以在二进制文件中读取带string的数据_文件处理 | csv文件读写
  4. DOM-window下的常用子对象-location-刷新页面
  5. /dev/mapper/centos-root 100% 虚拟机硬盘空间占满
  6. guns使用注意问题
  7. 点击类选择器,获取索引
  8. 组件价格跳水,光伏产品面临量价齐跌
  9. linux rsync配置文件参数详解
  10. python list append 相关知识点