LeetCode-93. Restore IP Addresses (JAVA)(重新组合IP)
来源:互联网 发布:知乎 庞麦郎 编辑:程序博客网 时间:2024/06/05 02:34
93. 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)
backtracking, 找出第一部分合法的IP, 剩余部分变成相似子问题。
public List<String> restoreIpAddresses(String s) {List<String> res = new ArrayList<String>();if (s.length() < 4 || s.length() > 12)return res;dfs(s, "", res, 1);return res;}public void dfs(String s, String temp, List<String> res, int count) {if (count == 4 && isValid(s)) {res.add(temp + s);return;}// Math.min(4, s.length())后面几位少于4的情况比如,0000for (int i = 1; i < Math.min(4, s.length()); i++) {String cur = s.substring(0, i);if (isValid(cur)) {// i 是beginIndexdfs(s.substring(i), temp + cur + ".", res, count + 1);}}}public boolean isValid(String s) {// 前导0,如果第一个字符是0,只能一个为0if (s.charAt(0) == '0')return s.equals("0");int num = Integer.parseInt(s);return 0 < num && num < 256;}
discuss:回溯
public List<String> restoreIpAddresses(String s) {List<String> res = new ArrayList<>();helper(s, "", res, 0);return res;}public void helper(String s, String tmp, List<String> res, int n) {// 剪枝,因ip不会超过三位if (s.length() > 3 * (4 - n))return;if (n == 4) {if (s.length() == 0)// substring here to get rid of last '.'// 去掉最后一个'.'res.add(tmp.substring(0, tmp.length() - 1));return;}for (int k = 1; k <= 3; k++) {// 如果剩余的长度还不够k那么说明不能排列成ipif (s.length() < k)break;int val = Integer.parseInt(s.substring(0, k));// in the case 010 the parseInt will return len=2// where val=10, but k=3, skip this.// k != String.valueOf(val).length(),为了避免前导0情况if (val > 255 || k != String.valueOf(val).length())continue;helper(s.substring(k), tmp + s.substring(0, k)+ ".", res, n + 1);}}直接使用循环:
public List<String> restoreIpAddresses(String s) {List<String> res = 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), s2 = s.substring(i, j), s3 = s.substring(j, k),s4 = s.substring(k, len);if (isValid(s1) && isValid(s2)&& isValid(s3) && isValid(s4)) {res.add(s1 + "." + s2 + "." + s3 + "." + s4);}}}}return res;}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;}
0 0
- LeetCode-93. Restore IP Addresses (JAVA)(重新组合IP)
- 【leetcode】93. Restore IP Addresses【java】
- [Leetcode] Restore IP Addresses (Java)
- [LeetCode][Java] Restore IP Addresses
- leetcode:Restore IP Addresses 【Java】
- LeetCode 93. Restore IP Addresses
- [Leetcode] 93. Restore IP Addresses
- LeetCode --- 93. Restore IP Addresses
- [LeetCode]93.Restore IP Addresses
- Leetcode 93.Restore IP Addresses
- [leetcode] 93.Restore IP Addresses
- [leetcode] 93.Restore IP Addresses
- 93. Restore IP Addresses LeetCode
- leetcode 93. Restore IP Addresses
- Leetcode 93. Restore IP Addresses
- LeetCode 93. Restore IP Addresses
- LeetCode *** 93. Restore IP Addresses
- leetcode 93. Restore IP Addresses
- iOS 蓝牙 Corebluetooth
- 关于js注册事件的疑问
- DialogFragment的使用
- git 拉取所有分支
- Ubuntu 右键在当前位置打开终端
- LeetCode-93. Restore IP Addresses (JAVA)(重新组合IP)
- 在一台服务器上配置多个Tomcat的方法
- syslog4j发送消息和接收消息demo新
- HDU 1009 FatMouse' Trade(贪心)
- angularJS中service、provice、factor区别
- Skynet服务器框架(四) Lua服务创建和启动剖析
- (NEON实例一)ARM处理器NEON编程及优化技巧——数据加载和存储
- Spring任务调度器之Task的使用
- Unity3D各部分执行顺序图