Given a string containing only digits, restore it by returning all possible valid IP address combinations.
Example:
Input: "25525511135"Output: ["255.255.11.135", "255.255.111.35"]
题意
解析一段字符串,返回所有能构成有效IP地址的组合。
思路
有效的IP地址由四节组成,每一节的数字最多有三位且该数字不大于255,有多位的数字起始不能为0。
利用回溯法进行处理。
代码实现
class Solution {public List<String> restoreIpAddresses(String s) {List<String> ans = new ArrayList<>();if (s.length() > 12 || s.length() < 4) {return ans;}dfs(s, 0, new StringBuilder(), 0, ans);return ans;}private void dfs(String s, int pos, StringBuilder sb, int size, List<String> ans) {if (pos == s.length() && size == 4) {ans.add(sb.toString());return;} else if (size == 4) {// 如果已经有四节,但还有字符没处理return;}for (int i = 1; i <= 3; i++) {if (pos + i > s.length() || i > 1 && s.charAt(pos) == '0') {break;}String t = s.substring(pos, pos + i);if (Integer.parseInt(t) <= 255) {t = pos == 0 ? t : '.' + t;sb.append(t);dfs(s, pos + i, sb, size + 1, ans);sb.delete(sb.length() - t.length(), sb.length());}}}}
