【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,将字符串转为整数. 在找到第一个非空字符之前,需要移除掉字符串中的空格字符.如果第一个非空字符是正号或负号,选取该符号,并将其与后面尽可能多的连续的数字组合起来,这部分字符即 ...
随机推荐
- 日志系统之扩展Flume-LineDeserializer
本人博客文章如未特别注明皆为原创.如有转载请注明出处:http://blog.csdn.net/yanghua_kobe/article/details/46595401 继续闲聊日志系统,在之前的博 ...
- springMVC对简单对象、Set、List、Map的数据绑定和常见问题.
算了,就不粘贴了,到原文去查看吧! springMVC对简单对象.Set.List.Map的数据绑定和常见问题.
- jdk的安装 打包jar 运行jar
安装 系统变量→新建 JAVA_HOME 变量 . 变量值填写jdk的安装目录(本人是 E:\Java\jdk1.7.0) 系统变量→寻找 Path 变量→编辑 在变量值最后输入 %JAVA_HOME ...
- 使用google地图API
1.获取key 2.获取相应地方的坐标:https://support.google.com/maps/answer/18539?co=GENIE.Platform%3DDesktop&hl= ...
- weblogic 8.1教程之部署(三)
在 weblogic 都配置好了之后.就能够部署项目了. 部署项目的时候,能够大体分为两个步骤: 1,创建缓冲池: 2,配置数据源. 先启动 weblogicserver.进入weblogic 的主页 ...
- azure绑定ssl,godaddy的ssl证书
域名是godaddy 申请的,证书也是godaddy 购买的,DV证书. godaddy购买证书后,申请ssl,需要输入,csr.网上找的csr生成工具,我使用 https://myssl.com/ ...
- ios -bitmap上下文生成图片 生成水印
- (void)test { // 0. 加载背景图片 UIImage *image = [UIImage imageNamed:@"psb"]; // 1.创建bitmap上下文 ...
- Android自己主动化构建之Ant多渠道打包实践(下)
前言 上一篇(Android自己主动化构建之Ant多渠道打包实践(上))已经介绍了Android的apk是怎样构建的,本篇博客继续Ant打包的实践过程. 集成友盟统计SDK 这里以友盟统计为例,对各个 ...
- 《从零开始学Swift》学习笔记(Day 23)——尾随闭包
原创文章,欢迎转载.转载请注明:关东升的博客 闭包表达式可以作为函数的参数传递,如果闭包表达式很长,就会影响程序的可读性.尾随闭包是一个书写在函数括号之后的闭包表达式,函数支持将其作为最后一个参数调用 ...
- FFF at Valentine(强连通分量缩点+拓扑排序)
FFF at Valentine Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...