Leetcode 之 Restore IP Addresses
2015-07-22 00:30
483 查看
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)
这道题是回溯和子串分割的问题,把字串分成当前串、剩余串,并记录当前分了几位(cur,left,num),然后用用递归的方法把满足条件的子串加入结果列表返回即可。
难点在于返回条件的选取,主要有以下几种:
已经分成四段,但是left还有东西的
还没分完但是left已经空的
分割出的子串比255大的
分割成两位,值却比10小的(主要排除01的情况)
分割成三位,值却比100小的(排除001或010的情况)
给的原始串长度小于等于0或者大于12的
当已经分成四段,left还不剩下啥的时候就直接加入结果集吧~
147 / 147 test cases passed.
Status: Accepted
Runtime: 312 ms
For example:
Given “25525511135”,
return [“255.255.11.135”, “255.255.111.35”]. (Order does not matter)
这道题是回溯和子串分割的问题,把字串分成当前串、剩余串,并记录当前分了几位(cur,left,num),然后用用递归的方法把满足条件的子串加入结果列表返回即可。
难点在于返回条件的选取,主要有以下几种:
已经分成四段,但是left还有东西的
还没分完但是left已经空的
分割出的子串比255大的
分割成两位,值却比10小的(主要排除01的情况)
分割成三位,值却比100小的(排除001或010的情况)
给的原始串长度小于等于0或者大于12的
当已经分成四段,left还不剩下啥的时候就直接加入结果集吧~
List<String> result = new ArrayList<String>(); public List<String> restoreIpAddresses(String s) { int len = s.length(); if(len <= 0 || len > 12) return result; split("", s, 4); return result; } public void split(String cur, String left, int num){ if(num == 0 && left.length() != 0 ) return; if(num != 0 && left.equals( "")) return; if(num == 0 && left.equals("")){ result.add(cur); return; } String sub = ""; if(left.length() > 0){ sub = left.substring(0, 1); if(Integer.parseInt(sub) > 255) return; else{ String addString = cur + "." + sub; if(num == 4){ addString = cur + sub; } split(addString, left.substring(1), num - 1); } } if(left.length() > 1){ sub = left.substring(0, 2); if(Integer.parseInt(sub) > 255 || Integer.parseInt(sub) < 10) return; else{ String addString = cur + "." + sub; if(num == 4){ addString = cur + sub; } split(addString, left.substring(2), num - 1); } } if(left.length() > 2){ sub = left.substring(0, 3); if(Integer.parseInt(sub) > 255 || Integer.parseInt(sub) < 100) return; else{ String addString = cur + "." + sub; if(num == 4){ addString = cur + sub; } split(addString, left.substring(3), num - 1); } } }
147 / 147 test cases passed.
Status: Accepted
Runtime: 312 ms
相关文章推荐
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- leetcode_linearList
- leetcode_linearList02
- LeetCode[Day 1] Two Sum 题解
- LeetCode[Day 2] Median of Two Sorted Arrays 题解
- LeetCode[Day 3] Longest Substring Without... 题解
- LeetCode [Day 4] Add Two Numbers 题解
- LeetCode [Day 5] Longest Palindromic Substring 题解
- LeetCode [Day 6] ZigZag Conversion 题解