# 93. 复原 IP 地址

// 给定一个只包含数字的字符串,用以表示一个 IP 地址,返回所有可能从 s 获得的 有效 IP 地址 。你可以按任何顺序返回答案。
// 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。
// 例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是 无效 IP 地址。
var restoreIpAddresses = function(s) {
  if (s.length > 12) return [];
  const set = new Set();

  function dfs(arr, i) {
    if (arr.length === 4 && i === s.length) {
      return set.add(arr.join("."));
    }

    for (let j = i + 1; j < Math.min(i + 4, s.length + 1); j++) {
      if (j === i + 1) {
        dfs([...arr, +s[j - 1]], j);
      } else if (s[i] !== "0") {
        const num = +s.substring(i, j);
        if (num <= 255) dfs([...arr, num], j);
      }
    }
  }

  dfs([], 0);

  return [...set];
};
console.log(restoreIpAddresses("25525511135"));
console.log(restoreIpAddresses("0000"));
console.log(restoreIpAddresses("1111"));
console.log(restoreIpAddresses("010010"));
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
Last Updated: 6/27/2023, 7:40:45 PM