Leetcode刷题(第39题)——组合总和

x33g5p2x  于2022-02-28 转载在 其他  
字(0.7k)|赞(0)|评价(0)|浏览(370)

一、题目

二、示例

  1. //示例一
  2. 输入:candidates = [2,3,6,7], target = 7
  3. 输出:[[2,2,3],[7]]
  4. 解释:
  5. 2 3 可以形成一组候选,2 + 2 + 3 = 7 。注意 2 可以使用多次。
  6. 7 也是一个候选, 7 = 7
  7. 仅有这两种组合。
  8. //示例二
  9. 输入: candidates = [2,3,5], target = 8
  10. 输出: [[2,2,2,2],[2,3,3],[3,5]]
  11. //示例三
  12. 输入: candidates = [2], target = 1
  13. 输出: []

三、解题思路
本题主要采用的思想是递归算法,由于其中的数字可以重复使用。

如上图所示,我们通过遍历实现, 如果每一次遍历都从头开始遍历,则可能会有重复的,所以每一次递归我们保存当前index,此时只能从当前的index进行遍历。递归终止条件是:当sum的值大于或者等于target
四、代码解析

  1. /**
  2. * @param {number[]} candidates
  3. * @param {number} target
  4. * @return {number[][]}
  5. */
  6. var combinationSum = function (candidates, target) {
  7. let result = []
  8. const rec = (curArr, index, sum) => {
  9. if (sum >= target) {
  10. if (sum === target) {
  11. result.push([...curArr])
  12. }
  13. return
  14. }
  15. for (let i = index; i < candidates.length; i++) {
  16. curArr.push(candidates[i])
  17. rec(curArr, i, sum + candidates[i])
  18. curArr.pop()
  19. }
  20. }
  21. rec([], 0, 0)
  22. return result
  23. };

五、总结

相关文章