有效 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 地址。

给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 ‘.’ 来形成。你 不能 重新排序或删除 s 中的任何数字。你可以按 任何 顺序返回答案。

思路

  1. 无脑递归处理好判断条件即可
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
var restoreIpAddresses = function (s) {
const result = []
const handler = (ipParts, curIndex) => {
const curVal = ipParts[ipParts.length - 1]
if (curVal > 255) {
return
}
if (curIndex >= s.length) {
if (ipParts.length === 4) {
result.push(ipParts.join('.'))
}
return
}
if (ipParts.length < 4) {
handler([...ipParts, Number(s[curIndex])], curIndex + 1)
}
if (curVal !== 0) {
ipParts[ipParts.length - 1] = ipParts[ipParts.length - 1] * 10 + Number(s[curIndex])
handler(ipParts, curIndex + 1)
}
}
handler([Number(s[0])], 1)
return result
}