问题描述:
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)
原问题链接:https://leetcode.com/problems/restore-ip-addresses/
问题分析
在这个问题描述里,主要针对的是ipv4的值的情况。从给定的字符串来说,一个ip地址所对应的地址分为4个字段,每个字段对应的数值最多为3位。假定我们先考虑地址的第一个部分,那么它可以取的值为0到255之间。所以它在对应的字符串里可以取第一个字符,第一二个字符和第一到第三个字符的情况。它们对应于字符串里的子串(s.charAt(0, 1), s.charAt(0, 2), s.charAt(0, 3))。这些情况里我们还需要判断它最终解析成整数的值是否在255之内。
这样,对于取ip地址的第一段来说,我们只需要循环的取前面的1, 2, 3这几个字符的情况来判断就可以了。对于后面的第二、三四段来说也类似。每次在前一个的基础上取1, 2, 3这几个字符,然后再来判断。如果合格的,就将构造出来的串加入到结果列表中。
按照这个思路,详细的代码实现如下:
public class Solution { public List<String> restoreIpAddresses(String s) { List<String> list = new ArrayList<String>(); int len = s.length(); for(int i = 1; i < 4 && i < len - 2; i++) { for(int j = i + 1; j < i + 4 && j < len - 1; j++) { for(int k = j + 1; k < j + 4 && k < len; k++) { String s1 = s.substring(0, i); String s2 = s.substring(i, j); String s3 = s.substring(j, k); String s4 = s.substring(k, len); if(isValid(s1) && isValid(s2) && isValid(s3) && isValid(s4)) list.add(s1 + "." + s2 + "." + s3 + "." + s4); } } } return list; } public boolean isValid(String s){ if(s.length() > 3 || s.length() == 0 || (s.charAt(0) == '0' && s.length() > 1) || Integer.parseInt(s) > 255) return false; return true; } }
相关推荐
restoreIPAddresses 复原IP地址 threeSum 三数之和 search 搜索旋转排序数组 1. 3. 9. 75. 209. 219. 167. 268. 344. 349. 454. 447. 695. 674. string 字符串 20. 150. linklist 链表 19. 24. 86. 92. 203. 206. ...
python python_leetcode题解之093_Restore_IP_Addresses
c语言基础 c语言_leetcode题解之0093_restore_ip_addresses.zip
javascript js_leetcode题解之93-restore-ip-addresses.js
093:Restore IP Addresses 树的遍历问题也可以用这种思想来解释。只不过是特殊的递归而已。(只有两路,不用循环) 题型二:动态规划(要整理搜索和DP的区别,都可以用一个状态转移公式F(n)表示) 053:最大字串...
leetcode盒子嵌套 leetcode-text 92.Reverse Linked List II Runtime: 4 ms, faster than 67.04% of C online submissions for Reverse Linked List II. Memory Usage: 6.9 MB, less than 100.00% of C online ...
public List<String> restoreIpAddresses(String s) { List<String> list = new ArrayList(); int len; if (s == null || (len = s.length()) || len > 12) { return list; } for (int i = 0; i ; i++) { ...
Algorithm:restore-ip-addresses(递归) Review:redis sentinel conf Tip:redis查看主从同步是否完成 Share:学习总结 - docker的基本使用 第一周 Algorithm:reverse-linked-list-ii(链表) Review:linux编程...
`restoreIpAddresses` 是主入口,它初始化结果集合并调用 `helper` 函数开始搜索。 2. 在 `helper` 函数中,我们进行递归调用或循环迭代,对于每种可能的子串长度(1, 2, 或 3),检查其是否满足条件并进行处理。 3....
leetcode卡 LeetCodeMing 记录自己日常刷题LeetCode的点滴,技术改变世界,FOR ...93.Restore IP Addresses [官网链接] () Array 1.Two Sum 15.3Sum 16.3Sum Closest 18.4Sum Other 306.Additive Number [官网链接] ()
def restoreIpAddresses(self, s: str) -> List[str]: s_len = len(s) res = [] if s_len < 4 or s_len > 12: return res path = [] self.dfs(s, s_len, 0, 0, path, res) return res def dfs(self, s, ...
`Solution`类有一个公共成员函数`restoreIpAddresses`,它接收一个字符串`s`作为参数,用于恢复可能的IP地址。同时,还定义了一个私有辅助函数`helper`,用于递归处理字符串`s`来构造IP地址。 2. **递归算法**:`...
leetcode Java 246 題目及解答 (英文) Contents 1 Rotate Array in Java 15 2 Reverse Words in a String II 19 ...243 Restore IP Addresses 589 244 Reverse Integer 591 245 Palindrome Number 593