题目描述:给一串数字求出所有可能的 IP 地址
例:
输入 25525511135
输出 255.255.11.135 255.255.111.35
解题思路:
我暂时想到的只有一种最苯的方法就是不停循环然后输出所有可能值。
1. 判断是否为数字,然后判断长度如果为4或者16直接输出答案;
2. 定义变量 A,B,C,D他们代表 IP 地址的部分;
3. 求出 A 的所有可能值,然后 B 的起始位置是 A 的末位置,求出 B 的所有可能;
4. 按照求 B 的方法依次求出 C,D ;
5. 找出长度符合题目要求的 IP 地址输出即可。
示例代码:
var strings = '11223344';
var A = '';
if (strings.length === 4 && !isNaN(strings)) {
console.log(strings[0] + '.' + strings[1] + '.' + strings[2] + '.' + strings[3]);
} else if (strings.length === 16 && !isNaN(strings)) {
console.log(strings.slice(0, 4) + '.' + strings.slice(4, 8) + '.' + strings.slice(8, 12) + '.' + strings.slice(12, 16))
;
} else if (strings.length > 4 && strings.length < 16 && !isNaN(strings)) {
for (var a = 0; a < 3; a++) {
A += strings[a];
if (parseInt(A) > 0 && parseInt(A) <= 255) {
var B = '';
for (var b = A.length; B.length < 6 - A.length; b++) {
B += strings[b];
if (parseInt(B) > 0 && parseInt(B) <= 255) {
var C = '';
for (var c = B.length + A.length; C.length < 9 - A.length - B.length; c++) {
C += strings[c];
if (parseInt(C) > 0 && parseInt(C) <= 255) {
var D = '';
for (var d = B.length + A.length + C.length; D.length < 12 - B.length - A.length - C.length; d++) {
D += strings[d];
if (parseInt(D) > 0 && parseInt(D) < 255) {
if (A.length + B.length + C.length + D.length === strings.length) {
console.log(A + '.' + B + '.' + C + '.' + D);
}
}
}
}
}
}
}
}
}
} else {
console.log('error')
}
备注:这是一种最苯的办法不可取的,暂时记录如果找到更好的方法再优化代码。