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

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

leetcode 40 组合总和2

给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

candidates 中的每个数字在每个组合中只能使用一次。

说明:

  • 所有数字(包括目标数)都是正整数。
  • 解集不能包含重复的组合。

示例 1:

输入: candidates = [10,1,2,7,6,1,5], target = 8,所求解集为:[  [1, 7],  [1, 2, 5],  [2, 6],  [1, 1, 6]]

解题思路:

分析本题所采用的数据结构与算法,可知属于树形问题,采用回溯法。

  • 对数组进行从小到大的排序。
  • 每个数字只有取和不取两种状态,分别搜索。

按照刻意练习的思路思考:

1、递归树和状态变量。状态变量:当期值下标、总和、新数组

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3sQz2trc-1616459935579)(C:%5CUsers%5CAsus%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20210314163518591.png)]

2、递归出口:sum === target push

3、选择列表: for循环当前下标+1后的元素

4、剪枝:sum>target return

5、撤销操作:for循环中pop

var combinationSum2 = function (candidates, target) {     candidates.sort((a, b) => a - b);  var len = candidates.length;  const res = [];  var dfs = function (sum, start, temp) {       if (sum === target) {         res.push(temp.slice());    }    if (sum > target) {         return;    }    for (let i = start; i < len; 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;};console.log(combinationSum2([10, 1, 2, 7, 6, 1, 5], 8));

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

你可能感兴趣的文章
MySQL 常见的 9 种优化方法
查看>>
MySQL 常见的开放性问题
查看>>
Mysql 常见错误
查看>>
mysql 常见问题
查看>>
MYSQL 幻读(Phantom Problem)不可重复读
查看>>
mysql 往字段后面加字符串
查看>>
mysql 快速自增假数据, 新增假数据,mysql自增假数据
查看>>
Mysql 批量修改四种方式效率对比(一)
查看>>
Mysql 报错 Field 'id' doesn't have a default value
查看>>
MySQL 报错:Duplicate entry 'xxx' for key 'UNIQ_XXXX'
查看>>
Mysql 拼接多个字段作为查询条件查询方法
查看>>
mysql 排序id_mysql如何按特定id排序
查看>>
Mysql 提示:Communication link failure
查看>>
mysql 插入是否成功_PDO mysql:如何知道插入是否成功
查看>>
Mysql 数据库InnoDB存储引擎中主要组件的刷新清理条件:脏页、RedoLog重做日志、Insert Buffer或ChangeBuffer、Undo Log
查看>>
mysql 数据库中 count(*),count(1),count(列名)区别和效率问题
查看>>
mysql 数据库备份及ibdata1的瘦身
查看>>
MySQL 数据库备份种类以及常用备份工具汇总
查看>>
mysql 数据库存储引擎怎么选择?快来看看性能测试吧
查看>>
MySQL 数据库操作指南:学习如何使用 Python 进行增删改查操作
查看>>