Restore IP Addresses leetcode java

本文介绍了一种通过循环递归解决字符串中仅包含数字的有效IP地址组合问题的方法。利用递归填充每段IP地址,确保每段不超过3位且整体不超过4段,同时保证所有组合的合法性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

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)

 

题解

利用循环递归解决子问题。对于每个段内数来说,最多3位最少1位,所以在每一层可以循环3次,来尝试填段。因为IP地址最多4个分段,当层数是3的时候说明已经尝试填过3个段了,那么把剩余没填的数段接到结尾即可。

这个过程中要保证的是填的数是合法的,最后拼接的剩余的数也是合法的。

 注意开头如果是0的话要特殊处理,如果开头是0,判断整个串是不是0,不是的话该字符就是非法的。因为001,01都是不对的。

代码如下:

 1     public ArrayList<String> restoreIpAddresses(String s) {  
 2         ArrayList<String> res = new ArrayList<String>();  
 3         String item = new String();
 4         if (s.length()<4||s.length()>12) 
 5         return res;  
 6         
 7         dfs(s, 0, item, res);  
 8         return res;  
 9     }  
10       
11     public void dfs(String s, int start, String item, ArrayList<String> res){  
12         if (start == 3 && isValid(s)) {  
13             res.add(item + s);  
14             return;  
15         }  
16         for(int i=0; i<3 && i<s.length()-1; i++){  
17             String substr = s.substring(0,i+1);  
18             if (isValid(substr))
19                 dfs(s.substring(i+1, s.length()), start+1, item + substr + '.', res);  
20         }  
21     }  
22       
23     public boolean isValid(String s){  
24         if (s.charAt(0)=='0')
25             return s.equals("0");  
26             int num = Integer.parseInt(s);
27             
28         if(num <= 255 && num > 0)
29             return true;
30         else
31             return false;
32     } 

 Refrence:http://blog.youkuaiyun.com/u011095253/article/details/9158449

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值