【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 }
分类:
leetcode刷题总结
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了