前端算法总结——回溯算法

125 阅读1分钟

回溯算法

  • 回溯算法是算法设计中的一种思想
  • 回溯算法是一种渐进式寻找并构建问题解决方式的策略
  • 回溯算法会先从一个可能的动作开始解决问题,如果不行,就回溯到另一个动作,直到将问题解决

leetcode 相关题目

leetcode-46.全排列

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var permute = function (nums) {
    const res = [];
    const backtrack = (path) => {
        if(path.length === nums.length) {
            res.push(path);
            return;
        }
        nums.forEach(n => {
            if (path.includes(n)) {
                return;
            }
            backtrack(path.concat(n));
        })
    };
    backtrack([]);
    return res;
};

leetcode-78.子集

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var subsets = function (nums) {
    const res = [];
    const backtrack = (path, length, start) => {
        if(path.length === length) {
            res.push(path);
            return;
        }
        for (let i = start; i < nums.length; i++) {
            backtrack(path.concat(nums[i]), length, i + 1);
        }
    }
    for (let i = 0; i <= nums.length; i++) {
        backtrack([], i, 0);
    }
    return res;
};