《LeetCode力扣练习》代码随想录——回溯算法(复原IP地址—Java)
刷题思路来源于 代码随想录
93. 复原 IP 地址
-
回溯
class Solution { private StringBuilder sb; private List<String> result = new ArrayList<>(); public List<String> restoreIpAddresses(String s) { sb = new StringBuilder(s); backtrack(0, 0); return result; } private void backtrack(int startIndex, int count) { if (count == 3) { if (verify(startIndex, sb.length() - 1)) { result.add(new String(sb)); return; } } for (int i = startIndex; i < sb.length(); i++) { if (!verify(startIndex, i)) { continue; } sb.insert(i + 1, '.'); count++; backtrack(i + 2, count); sb.deleteCharAt(i + 1); count--; } return; } private boolean verify(int left, int right) { if (left == sb.length()) { return false; } if (sb.charAt(left) == '0' && left != right) { return false; } int sum = 0; for (int i = left; i <= right; i++) { if (sb.charAt(i) < '0' || sb.charAt(i) > '9') { return false; } sum = sum * 10 + (sb.charAt(i) - '0'); if (sum > 255) { return false; } } return true; } }