class Solution { private static int SEG_COUNT = 4; // ipv4地址下的IP地址分为4段 public List<String> restoreIpAddresses(String s) { List<String> ans = new ArrayList<>(); if (s == null || s.length() <= 3) return ans; int[] segments = new int[SEG_COUNT]; // 保存每段的十进制数形式 dfs(s, 0, segments, 0, ans); return ans; } private void dfs(String s, int index, int[] segments, int segNum, List<String> ans) { // 完成搜索并且获得每段的十进制数字形式 if (segNum == SEG_COUNT) { if (index == s.length()) { StringBuilder currentIP = new StringBuilder(); for (int i = 0; i < SEG_COUNT; i++) { currentIP.append(segments[i]); if (i != SEG_COUNT - 1) currentIP.append("."); } // for ans.add(currentIP.toString()); } // if return; } // if // 没有找到4段就搜索完了整个字符串 if (index == s.length()) return; if (s.charAt(index) == '0') { // 直接确定当前的这段为0 segments[segNum] = 0; dfs(s, index + 1, segments, segNum + 1, ans); } int addr = 0; // for (int end = index; end < s.length(); end++) { addr = addr * 10 + (s.charAt(end) - '0'); if (addr > 0 && addr <= 255) { segments[segNum] = addr; dfs(s, end + 1, segments, segNum + 1, ans); } else { break; } } }}