📝Leetcode 77. 组合

133 阅读1分钟

题目🌵

📝Leetcode 77. 组合

✏️leetcode-cn.com/problems/co…


给定两个整数 nk,返回范围 [1, n] 中所有可能的 k 个数的组合。

你可以按 任何顺序 返回答案。

示例 1:

输入:n = 4, k = 2
输出:
[
  [2,4],
  [3,4],
  [2,3],
  [1,2],
  [1,3],
  [1,4],
]

解题思路💡

  • 递归+回溯

  • 回溯的本质就是穷举,我们这里可以抽象成一个n叉树

    • 回溯需要终止条件

    • 在当前题目中,当路径中的元素个数===数组元素个数,即为一组排列组合

      if (path.length === k) {
          res.push([...path])     //当数组元素===原来数组的个数,说明一种排列组合完成
          //递归终止
          return
      }
      
var combine = function (n, k) {
    const result = [], path = []
    const backTracking = (startIndex, n, k) => {
        //剪枝,去掉大于k个的组合
        for (let i = startIndex; i <= n - (k - path.length) + 1; i++) {
            if (path.length === k) {
                result.push([...path])
                return
            }
            path.push(i)
            backTracking(i + 1, n, k)
            path.pop()
        }
    }
    backTracking(1, n, k)
    return result
};

image-20220308145745915