【leetcode刷题笔记】Restore IP Addresses
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相关推荐
- 卷进大厂系列之LeetCode刷题笔记:二分查找(简单)
LeetCode刷题笔记:二分查找(简单) 学算法,刷力扣,加油卷,进大厂! 题目描述 涉及算法 题目解答 学算法,刷力扣,加油卷,进大厂! 题目描述 力扣题目链接 给定一个 n 个元素有序的(升序) ...
- LeetCode刷题笔记2——数组2
LeetCode刷题笔记2--数组2 重塑数组 题目 在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原 ...
- 小何同学的leetcode刷题笔记 基础篇(01)整数反转
小何同学的leetcode刷题笔记 基础篇(01)整数反转[07] *** [01]数学取余法*** 对数字进行数位操作时,常见的方法便是用取余的方法提取出各位数字,再进行操作 操作(1):对10取余 ...
- LeetCode刷题笔记汇总
LeetCode刷题笔记汇总 第一次刷LeetCode写的一些笔记. 1.两数之和 3.无重复字符的最长子串 15.三数之和 18.四数之和 19.删除链表的倒数第 N 个结点 20.有效的括号 21 ...
- 【leetcode刷题笔记】动态规划
#[leetcode刷题笔记]动态规划 石子游戏 public boolean stoneGame(int[] piles) {int N = piles.length;// dp[i][j] is ...
- LeetCode刷题笔记-动态规划-day4
文章目录 LeetCode刷题笔记-动态规划-day4 55. 跳跃游戏 1.题目 2.解题思路 3.代码 45. 跳跃游戏 II 1.题目 2.解题思路 3.代码 LeetCode刷题笔记-动态规划 ...
- LeetCode刷题笔记- 15.三数之和
LeetCode刷题笔记- 15.三数之和 C语言 题目 注意点 C语言 /*** Return an array of arrays of size *returnSize.* The sizes ...
- LeetCode刷题笔记第6题:Z字形变换
LeetCode刷题笔记第6题:Z字形变换 想法: 要完成字符串根据给定的行数从上往下,从左到右完成Z字形排列.当只有一行时直接返回原字符串,当行数大于1时,先以行数构建一个行数数值个空字符串的列表, ...
- leetcode刷题笔记——二分查找
leetcode刷题笔记--二分查找 目前完成的贪心相关的leetcode算法题序号: 中等:80,81 困难:4 来源:力扣(LeetCode) 链接:https://leetcode-cn.com ...
- LeetCode刷题笔记(算法思想 四)
LeetCode刷题笔记(算法思想 四) 七.动态规划 斐波那契数列 70. 爬楼梯 198. 打家劫舍 213. 打家劫舍 II 信件错排 母牛生产 矩阵路径 64. 最小路径和 62. 不同路径 ...
最新文章
- 嵌入式软件设计第12次实验报告-140201235-陈宇
- Gateway internal_length debug with Sara Zhang
- java的jdbc驱动server_win7下java用jdbc驱动来连接sql server的方法 (转载)
- vue 字典_【开源】基于Vue的前端组件库HeyUI
- php解析xml数据格式,PHP解析xml格式数据工具类实例分享
- 验证登陆信息的合法性
- 万智牌天使恩典oracle,#诡局#诡局机制
- 一起学习x86/x64知识(一)
- xcap工具使用心得
- C++编写COM组件 ATL工程
- 12306网站专家:拟采取办法应对抢票软件
- 基于FPGA的LED全彩图形显示控制器设计
- 硬盘RAID是什么意思?有什么用?
- edge扩展下载失败解决办法
- 使用Word制作文档封面
- 微信严正提醒!再做这件事,封号处理
- 前程无忧助力,再次举办湖北武汉网络专场招聘会
- 【Introduction to Artificial Intelligence and Data Analytics】(TBC)
- 放大电路基本性能指标
- Base64转码和字符串互转
热门文章
- zookeeper启动后查看状态的Error contacting service. It is probably not running.错误
- 任意切换线程的工具类
- c++怎么可以在二进制文件中读取带string的数据_文件处理 | csv文件读写
- DOM-window下的常用子对象-location-刷新页面
- /dev/mapper/centos-root 100% 虚拟机硬盘空间占满
- guns使用注意问题
- 点击类选择器,获取索引
- 组件价格跳水,光伏产品面临量价齐跌
- linux rsync配置文件参数详解
- python list append 相关知识点