# 93 复原 IP 地址
# 题目链接
# 难度:中等
# 思路分析:
编程题,递归
# 想
# 一
# 想
# 再
# 看
# 答
# 案
# 想
# 一
# 想
# 再
# 看
# 答
# 案
# 代码:
递归
var restoreIpAddresses = function(s) {
if (s.length > 12) return [];
let result = [];
fn(s, [], result);
return result;
};
// 递归
function fn(remain, temp, result) {
// 第四段
if (temp.length === 3) {
if (regular(remain)) {
// 合法即为正确的值
result.push([...temp, remain].join("."));
}
return;
}
// 每段长度都可能为1/2/3
for (let i = 1; i < 4; i++) {
// 合法才可继续
if (regular(remain.substr(0, i))) {
const strArr = [...temp, remain.substr(0, i)]; // 字符段
const str = remain.substr(i); // 剩下的字符串
fn(str, strArr, result);
}
}
}
// 验证合法性
function regular(s) {
if (!s.length) return false;
return 0 <= +s && +s <= 255 && (s.length > 1 ? !!+s[0] : true);
}
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
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
# 鼓励我一下:
觉得还不错的话,给我的项目点个star吧