题目: 给出一个字符串:'120056129',打印出所有可能的的IP地址,例如本题中应该打印:
1,200,56,129
120,0,56,129
分析: IP地址的格式是 (\d{1-3}){3} 其中每部分数字不能出现 01, 02 等情况。且在0-255之间。
解题: 应该是一个递归,递归的终止条件是4次,且最后一次字符串参数要符合IP规范。因为要打印所有IP,每一种IP都是全路径,所以要在递归的方法种传入上一次的计算,这样下来递归函数的参数有三个(pre, a, n)。因为符合截取IP的方法有多个,所以每次递归有多个分支。
function to(pre, a, n) {
if (n === 0) {
if (a.length <= 3 && Number(a) <= 255) {
console.log(pre.substring(1) + ',' + a)
}
return
}
to(pre + ',' + a.substring(0, 1), a.substring(1), n - 1)
if (a[0] !== '0') {
if (Number(a.substring(0, 2)) <= 255) {
to(pre + ',' + a.substring(0, 2), a.substring(2), n - 1)
}
if (Number(a.substring(0, 3)) <= 255) {
to(pre + ',' + a.substring(0, 3), a.substring(3), n - 1)
}
}
}
const run = (function test() {
return (a) => {
to('', a, 3)
}
})()
run('020456189')
run('120056129')