有效 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 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 }
|