1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| import java.util.ArrayList; import java.util.List; import java.util.Objects;
public class _93复原IP地址 {
public List<String> restoreIpAddresses_gov(String s) { List<String> result = new ArrayList<>(); backtrack(0, 0, new StringBuilder(), result, s); return result; }
private void backtrack(int start, int cnt, StringBuilder path, List<String> result, String s) { if (cnt == 4) { if (start == s.length()) { path.setLength(path.length() - 1); result.add(path.toString()); } return; }
int num = 0; for (int i = start; i < s.length() && i < start + 3; i++) { num = num * 10 + (s.charAt(i) - '0'); if (num > 0xFF || s.length() - i > 3 * (4 - cnt)) { break; } int len = path.length(); path.append(s, start, i + 1).append("."); backtrack(i + 1, cnt + 1, path, result, s); path.setLength(len); if (s.charAt(start) == '0') { break; } } }
public List<String> restoreIpAddresses(String s) { res = new ArrayList<>(); recursion(s, 0, 0, new StringBuilder()); return res; }
List<String> res;
private void recursion(String s, int level, int idx, StringBuilder sb) { if (idx == s.length() && level == 4) { res.add(sb.toString()); return; } else if (idx != s.length() && level == 4) { return; } else if (idx == s.length() && level != 4) { return; }
if (Objects.equals(s.charAt(idx), '0')) { StringBuilder sbTemp = new StringBuilder(sb.toString()); if (level != 3) { sbTemp.append("0").append("."); } else { sbTemp.append("0"); } recursion(s, level + 1, idx + 1, sbTemp); } else { for (int i = 0; i < 3 && i < s.length() - idx; i++) { String temp = s.substring(idx, idx + i + 1); int singleIp = Integer.parseInt(temp); if (singleIp >= 0 && singleIp <= 255) { StringBuilder sbTemp = new StringBuilder(sb.toString()); if (level != 3) { sbTemp.append(temp).append("."); } else { sbTemp.append(temp); } recursion(s, level + 1, idx + i + 1, sbTemp); } } } }
public static void main(String[] args) { _93复原IP地址 ip = new _93复原IP地址(); System.out.println(ip.restoreIpAddresses("25525511135")); } }
|