93. 复原 IP 地址

回溯

解题思路

  1. 25525511135 为例,第一步时有几种选择?

    • 2 作为第一个片段;
    • 25 作为第一个片段;
    • 255 作为第一个片段;
  2. 能切三种不同的长度,切第二个片段时,又面临三种选择;

  3. 这会向下分支,形成一棵树,用 DFS 去遍历所有选择,必要时提前回溯;

  4. 因为某一步的选择可能是错的,得不到正确的结果,不要往下做了,撤销最后一个选择,回到选择前的状态,去试另一个选择;

图解

代码实现

var restoreIpAddresses = function (s) {
    const res = [];
    backtrack(res, s, 0, []);
    return res;
};

const backtrack = (res, str, startInx, path) => {
    if (path.length > 4) return;
    // ip 地址 长度为 4 且 字符串全部用完了
    if (path.length === 4 && startInx === str.length) {
        res.push(path.join('.'));
        return;
    }

    for (let i = startInx; i < str.length; i++) {
        // 满足 ip 的条件
        const num = str.substr(startInx, i - startInx + 1);
        if (Number(num) > 255) break;
        if (num.length > 1 && num[0] === '0') break;

        path.push(num);
        backtrack(res, str, i + 1, path);
        path.pop();
    }
};
打赏作者
您的打赏是我前进的动力
微信
支付宝
评论

中午好👏🏻,我是 ✍🏻   疯狂 codding 中...

粽子

这有关于前端开发的技术文档和你分享。

相信你可以在这里找到对你有用的知识和教程。

了解更多

目录

  1. 1. 回溯
    1. 1.1. 解题思路
    2. 1.2. 图解
    3. 1.3. 代码实现