LeetCode 题解(157): Restore IP Addresses
来源:互联网 发布:qq晒密软件 编辑:程序博客网 时间:2024/05/07 23:13
题目:
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)
Backtracing,注意值必须有效,如“0”有效,而“01”,“001”, “010”等无效,值必须[0, 255]。
C++版:
class Solution {public: vector<string> restoreIpAddresses(string s) { vector<string> results; if(s.length() < 4 || s.length() > 12) return results; int start = max(1, (int)s.length() - 9) - 1; int end = min(3, (int)s.length() - 3) - 1; for(int i = start; i <= end; i++) { string result = s.substr(0, i + 1); if(result.length() == 3 && atoi(result.c_str()) > 255) break; if(result[0] == '0' && result.length() > 1) continue; restoreIP(s.substr(i + 1, s.length() - i - 1), results, result, 2); } return results; } void restoreIP(string s, vector<string>& results, string result, int count) { if(count == 0) { if(s.length() == 3 && atoi(s.c_str()) > 255) return; if(s[0] == '0' && s.length() > 1) return; result += "."; result += s; results.push_back(result); return; } int start = max(1, (int)s.length() - count * 3) - 1; int end = min(3, (int)s.length() - count) - 1; for(int i = start; i <= end; i++) { string temp = result; string part = s.substr(0, i + 1); if(part.length() == 3 && atoi(part.c_str()) > 255) break; if(part[0] == '0' && part.length() > 1) continue; temp += "."; temp += part; restoreIP(s.substr(i + 1, s.length() - i - 1), results, temp, count - 1); } }};
Java版:
public class Solution { public List<String> restoreIpAddresses(String s) { List<String> results = new ArrayList<String>(); if(s.length() < 4 || s.length() > 12) return results; int start = Math.max(1, s.length() - 9) - 1; int end = Math.min(3, s.length() - 3) - 1; for(int i = start; i <= end; i++) { String result = s.substring(0, i + 1); if(result.length() == 3 && Integer.parseInt(result) > 255) break; if(result.charAt(0) == '0' && result.length() > 1) continue; StringBuffer sb = new StringBuffer(result); restoreIP(s.substring(i + 1, s.length()), results, sb, 2); } return results; } public void restoreIP(String s, List<String> results, StringBuffer sb, int count) { if(count == 0) { if(s.length() == 3 && Integer.parseInt(s) > 255) return; if(s.charAt(0) == '0' && s.length() > 1) return; sb.append("."); sb.append(s); results.add(sb.toString()); return; } int start = Math.max(1, s.length() - count * 3) - 1; int end = Math.min(3, s.length() - count) - 1; for(int i = start; i <= end; i++) { String part = s.substring(0, i + 1); if(part.length() == 3 && Integer.parseInt(part) > 255) break; if(part.charAt(0) == '0' && part.length() > 1) continue; StringBuffer sb1 = new StringBuffer(sb.toString()); sb1.append("."); sb1.append(part); restoreIP(s.substring(i + 1, s.length()), results, sb1, count - 1); } }}
Python版:
import copyclass Solution: # @param {string} s # @return {string[]} def restoreIpAddresses(self, s): if len(s) < 4 or len(s) > 12: return [] start, end, results = max(1, len(s) - 9) - 1, min(3, len(s) - 3), [] for i in range(start, end): result = s[0:i+1] if len(result) == 3 and int(result) > 255: break if result[0] == '0' and len(result) > 1: continue self.restoreIP(s[i+1:], results, result, 2) return results def restoreIP(self, s, results, result, count): if count == 0: if len(s) == 3 and int(s) > 255: return if s[0] == '0' and len(s) > 1: return result += "." result += s results.append(result) start, end = max(1, len(s) - count * 3) - 1, min(3, len(s) - count) for i in range(start, end): temp = copy.copy(result) part = s[0:i+1] if len(part) == 3 and int(part) > 255: break if part[0] == '0' and len(part) > 1: continue temp += "." temp += part self.restoreIP(s[i+1:], results, temp, count - 1)
0 0
- LeetCode 题解(157): Restore IP Addresses
- LeetCode题解:Restore IP Addresses
- LeetCode题解:Restore IP Addresses
- Leetcode题解(2):L93/Restore IP Addresses
- LeetCode: Restore IP Addresses
- LeetCode : Restore IP Addresses
- [LeetCode] Restore IP Addresses
- [LeetCode]Restore IP Addresses
- LeetCode:Restore IP Addresses
- LeetCode Restore IP Addresses
- [leetcode] Restore IP Addresses
- LeetCode:Restore IP Addresses
- [LeetCode] Restore IP Addresses
- LeetCode - Restore IP Addresses
- LeetCode | Restore IP Addresses
- 【leetcode】Restore IP Addresses
- Leetcode: Restore IP Addresses
- leetcode Restore IP Addresses
- 使用Java 连接MongoDB3.X 3.04 带 auth 认证
- Chisel Tutorial(三)——组合电路
- 进程锁 process mutex ??
- 网络爬虫基础!
- Android安卓开发官方文档国内镜像
- LeetCode 题解(157): Restore IP Addresses
- Apache Tomcat8必备知识
- Struts2中的OGNL表达式的详解
- iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势)
- android(3)自定义View
- jQuery函数(浏览器版本/isEmptyObject/isPlainObject/contains/trim/param/extend)
- mysql存储引擎
- 使用java编写一款计算计算机群集可用性的程序
- POJ 3751 时间日期格式转换