[leetcode91]Restore IP Addresses(java)
2015-07-10 12:46
435 查看
问题描述:
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)
这个问题可以抽象成一棵树,根节点为空,每个节点下代表从当前位置向后一个、二个、三个字符(因为IP地址最大为3个字符)
并利用剪枝法,对不符合条件的不再继续。
很显然,若抽象成树,那需要使用DFS。当递归查询到最后一个部分(4)时,若满足条件,则将字符串添加到list中,如果不满足条件,简单的返回。
还有要注意,IP地址要有效的条件!
代码如下:
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)
这个问题可以抽象成一棵树,根节点为空,每个节点下代表从当前位置向后一个、二个、三个字符(因为IP地址最大为3个字符)
并利用剪枝法,对不符合条件的不再继续。
很显然,若抽象成树,那需要使用DFS。当递归查询到最后一个部分(4)时,若满足条件,则将字符串添加到list中,如果不满足条件,简单的返回。
还有要注意,IP地址要有效的条件!
代码如下:
[code]import java.util.ArrayList; public class ResoreIpAddr { private boolean isValid(String s){ int length = s.length(); if(length>=2&&s.charAt(0)=='0') return false; int nums = 0; for(int i = 0;i<length;i++) nums = nums*10+s.charAt(i)-'0'; if(nums>255) return false; return true; } private void dfs(String s,String tmp,ArrayList<String> list,int count){ if(count>=3){ if(isValid(s)) list.add(tmp+s); return; } String tmpString; for(int i = 1;i<4&&i<s.length();i++){ tmpString = s.substring(0, i); if(isValid(tmpString)){ dfs(s.substring(i), tmp+tmpString+'.', list, count+1); } } } public ArrayList<String> restoreIpAddresses(String s) { ArrayList<String> list = new ArrayList<String>(); if(s.length()<4||s.length()>12) return list; dfs(s, "", list, 0); return list; } public void test(){ ArrayList<String> list = restoreIpAddresses("2552551117"); int count = list.size(); for(int i = 0;i<count;i++){ System.out.println(list.get(i)); } } }
相关文章推荐
- java是要这样去学习的
- java基础巩固
- 设计模式系列--策略模式
- 19-struts2文件上传IE中失败
- 8.Java5原子性操作类的应用
- Zookeeper + Dubbo + SpringMVC + dubbo-admin
- Hession集成Spring + maven依赖通讯comm项目 + 解决@ResponseBody中文乱码
- Spring结合log4j(slf4j)
- Struts2数据封装
- Java8高中并发
- (Struts2)登录失败跳转到index.jsp
- Java程序中的延迟加载功能使用
- Java 安全套接字编程以及 keytool 使用最佳实践
- 简析Java中的util.concurrent.Future接口
- 9.Java5线程并发库的应用
- MyEclipse 下开发Java webService 和 Java webClient 的一个完整回调列子
- 编写Java代码制造一个内存溢出的情况
- 解析Java中的默认方法
- Java正则表达式
- Java字符集