博客
关于我
leetcode 40 组合总和2 js
阅读量:668 次
发布时间:2019-03-15

本文共 1150 字,大约阅读时间需要 3 分钟。

要解决这个问题,我们可以使用回溯法来找出所有可以组成目标数的组合。以下是详细的解决方案:

方法思路

  • 排序数组:首先对候选数组进行排序,这样可以确保我们每次选择的是有序的元素,避免重复选择相同的元素。
  • 递归函数设计:使用一个递归函数进行深度优先搜索,参数包括当前和、起始索引和临时数组。
  • 剪枝条件:如果当前和超过目标数,直接返回,避免不必要的递归调用。
  • 重复元素处理:在递归过程中,确保不重复选择相同的元素,特别是在数组中有连续的相同元素时。
  • 结果记录:当和等于目标数时,将当前组合添加到结果集中。
  • 解决代码

    combinationSum2 = function (candidates, target) {    candidates.sort((a, b) => a - b);    const res = [];    const dfs = (sum, start, temp) => {        if (sum === target) {            res.push(temp.slice());            return;        }        if (sum > target) {            return;        }        for (let i = start; i < candidates.length; i++) {            if (i > start && candidates[i] === candidates[i - 1]) {                continue;            }            temp.push(candidates[i]);            dfs(sum + candidates[i], i + 1, temp);            temp.pop();        }    };    dfs(0, 0, []);    return res;};

    代码解释

  • 排序数组:使用sort方法对候选数组进行排序。
  • 递归函数:定义了一个递归函数dfs,参数包括当前和sum、起始索引start和临时数组temp。
  • 递归条件:如果当前和等于目标数,添加组合到结果数组;如果当前和超过目标数,返回。
  • 遍历元素:从起始索引开始遍历数组中的每个元素。
  • 重复元素处理:如果当前元素与前一个元素相同,跳过以避免重复选择。
  • 递归调用:将当前元素加入临时数组,并递归调用函数。
  • 撤销操作:返回时从临时数组中移除元素,确保每次递归都有独立的组合路径。
  • 通过这种方法,我们可以高效地找到所有符合条件的组合,确保每个组合都是唯一的并且满足条件。

    转载地址:http://nhqmz.baihongyu.com/

    你可能感兴趣的文章
    python 中with的使用及样例
    查看>>
    python读取wav文件并播放[pyaudio/wave]
    查看>>
    python读取txt文件的行数
    查看>>
    Python 中内置的最大堆 API
    查看>>
    Python 中只有一个 True 和一个 False 对象吗?
    查看>>
    python读取mtcars数据集并实现以下操作_关于数据处理。。,Python交流,技术交流区,鱼C论坛 - Powered by Discuz!...
    查看>>
    Python 中多线程与多处理之间的区别
    查看>>
    Python 中如何使用 lambda 函数
    查看>>
    Python 中如何创建多行字符串?
    查看>>
    Python 中如何处理异常?
    查看>>
    Python 中如何实现列表的切片?
    查看>>
    Python 中如何实现字典的排序?
    查看>>
    Python 中常用的数据类型及相关操作详解
    查看>>
    python 中文乱码
    查看>>
    Python 中生成器与普通函数的区别
    查看>>
    Python 中的 *tuple 和 **dict 是什么意思?
    查看>>
    Python 中的 filter() 函数:筛选可迭代对象元素
    查看>>
    Python 中的 Pillow 不允许我打开图像(“超出限制“)
    查看>>
    Python 中的 threading 模块和 multiprocessing 模块有何区别?
    查看>>
    Python 中的 threading 模块和 multiprocessing 模块有何区别?
    查看>>