【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。
代码如下:
public class Solution {
private boolean isValidIp(String ip){
if(ip.charAt(0) == '0')
return ip.equals("0");
int digit = Integer.valueOf(ip);
return digit >= 0 && digit <= 255;
}
private void restoreIpRecur(String s,List<String> answer,ArrayList<String> result){
//result has more than four numbers but s is not empty, means we sperate s to more than 4 numbers
if(result.size()>=4 && !s.isEmpty())
return;
if(s.equals("")){
//if we sperate s exactly four valid numbers
if(result.size()==4){
//found one IP
String ip = new String();
for(String ss:result)
ip = ip + ss + ".";
ip = ip.substring(0,ip.length()-1);
answer.add(ip);
}
else {
return;
}
}
//get 1,2,3 characters from s's head and put it into result,search what's left in s recursively
for(int i = 1;i<=3&&i<=s.length();i++){
String sub = s.substring(0,i);
if(isValidIp(sub)){
result.add(sub);
restoreIpRecur(s.substring(i), answer, result);
result.remove(result.size()-1);
}
}
return;
}
public List<String> restoreIpAddresses(String s) {
ArrayList<String> answer = new ArrayList<String>();
ArrayList<String> result = new ArrayList<String>();
restoreIpRecur(s, answer, result);
return answer;
}
}
【leetcode刷题笔记】Restore IP Addresses的更多相关文章
- Leetcode 22. Generate Parentheses Restore IP Addresses (*) 131. Palindrome Partitioning
backtracking and invariant during generating the parathese righjt > left (open bracket and cloas ...
- LeetCode刷题笔记和想法(C++)
主要用于记录在LeetCode刷题的过程中学习到的一些思想和自己的想法,希望通过leetcode提升自己的编程素养 :p 高效leetcode刷题小诀窍(这只是目前对我自己而言的小方法,之后会根据自己 ...
- 18.9.10 LeetCode刷题笔记
本人算法还是比较菜的,因此大部分在刷基础题,高手勿喷 选择Python进行刷题,因为坑少,所以不太想用CPP: 1.买股票的最佳时期2 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. ...
- LeetCode刷题笔记 - 12. 整数转罗马数字
学好算法很重要,然后要学好算法,大量的练习是必不可少的,LeetCode是我经常去的一个刷题网站,上面的题目非常详细,各个标签的题目都有,可以整体练习,本公众号后续会带大家做一做上面的算法题. 官方链 ...
- Leetcode刷题笔记(双指针)
1.何为双指针 双指针主要用来遍历数组,两个指针指向不同的元素,从而协同完成任务.我们也可以类比这个概念,推广到多个数组的多个指针. 若两个指针指向同一数组,遍历方向相同且不会相交,可以称之为滑动窗口 ...
- LeetCode刷题笔记(1-9)
LeetCode1-9 本文更多是作为一个习题笔记,没有太多讲解 1.两数之和 题目请点击链接 ↑ 最先想到暴力解法,直接双循环,但是这样复杂度为n平方 public int[] twoSum(int ...
- LeetCode(93) Restore IP Addresses
题目 Given a string containing only digits, restore it by returning all possible valid IP address comb ...
- leetcode刷题笔记
(1)Best Time to Buy and Sell Stock Total Accepted: 10430 Total Submissions: 33800My Submissions Say ...
- leetcode刷题笔记08 字符串转整数 (atoi)
题目描述 实现 atoi,将字符串转为整数. 在找到第一个非空字符之前,需要移除掉字符串中的空格字符.如果第一个非空字符是正号或负号,选取该符号,并将其与后面尽可能多的连续的数字组合起来,这部分字符即 ...
随机推荐
- C - Aladdin and the Flying Carpet 有多少种长方形满足面积为a(<=10^12),且最短边>=b;长方形边长为整数,且一定不可以是正方形。
/** 题目:C - Aladdin and the Flying Carpet 链接:https://vjudge.net/contest/154246#problem/C 题意:有多少种长方形满足 ...
- gen_server边缘
我们以Module代表gen_server的callback模块 1, 实现gen_server behaviour的模块会产生一个新的process么? 毫无疑问,太会了!通过调用proc_lib: ...
- Android Studio--NDK编译C代码为.so文件,JNI调用
前言: 从Android Studio开始,就支持jni和.so库调用了. 环境: Windows 7+Android Studio2.1.2+NDK版本:android-ndk-r10e 准备工作: ...
- 巧用批处理cmd快速切换IP地址
如果你的笔记本经常在不同的地方使用,有些地方需要自动获取IP,而有些地方需要配置固定IP,每换一个地方都需要重新配置一遍,是不是感觉很麻烦呢? 下面介绍一种通过建立批处理文件来快速切换IP的方法: s ...
- pip依赖安装与记录
pip freeze requirements.txt是一个常常被许多Flask应用用于列出它所依赖的包的文本文件.它是通过pip freeze > requirements.txt生成的. 使 ...
- Eclipse 菜单
Eclipse 菜单 Eclipse 查看的菜单栏通常包含以下几个菜单: File 菜单 Edit 菜单 Navigate 菜单 Search 菜单 Project 菜单 Run 菜单 Window ...
- 在Ubuntu中搭建***服务
1) install shadowsocks$ sudo apt-get install python-pip $ sudo pip install shadowsocks 2) write /etc ...
- [Spring MVC]学习笔记--@Controller
在讲解@Controller之前,先说明一下Spring MVC的官方文档在哪. 可能会有人和我一样,在刚接触Spring MVC时,发现在Spring的网站上找不到Spring MVC这个项目. 这 ...
- mac安装以及删除mysql5.7
关于msyql5.7,安装时最大的改变就是有了一个默认密码 我安装的是mysql-5.7.17-macos10.12-x86_64.dmg 和mysql-workbench-community-6.3 ...
- echarts之series,markLine、markPoint
一.标记线和标志点 markLine 标记线 标记线的添加,如最大值.最小值.平均值的标记线 symbol 标记的图形. data->type 特殊的标注类型,用于标注最大值最小值等. 可选: ...