function restoreIpAddresses(s) {
const result = [];
function backtrack(start, path) {
// 如果剩余的字符数不符合IP地址的要求,则剪枝
if (s.length - start > (4 - path.length) * 3) return;
if (s.length - start < (4 - path.length)) return;
// 当找到了四段IP地址,且用光所有字符时,得到一个答案
if (path.length === 4 && start === s.length) {
result.push(path.join('.'));
return;
}
for (let len = 1; len <= 3; len++) {
// 防止越界
if (start + len > s.length) break;
// 取出一段字符串
const segment = s.substring(start, start + len);
// 排除长度大于1但以0开头的情况和大于255的情况
if (segment.length > 1 && segment.startsWith('0') || Number(segment) > 255) continue;
// 把当前段加入路径,并继续递归
path.push(segment);
backtrack(start + len, path);
path.pop(); // 回溯
}
}
// 从索引0开始递归查找IP地址的各个部分
backtrack(0, []);
return result;
}
// Example usage:
console.log(restoreIpAddresses("25525511135"));
console.log(restoreIpAddresses("0000"));
console.log(restoreIpAddresses("101023"));
某动一面——算法题
最新推荐文章于 2024-09-13 16:27:15 发布