组合-77


力扣(LeetCode) 链接:https://leetcode.cn/problems/combinations/discussion/

思路

  • 递归函数的返回值以及参数
  • 回溯函数终止条件
  • 单层搜索的过程
void backtracking(参数) {
    if (终止条件) {
        存放结果;
        return;
    }

    for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {
        处理节点;
        backtracking(路径,选择列表); // 递归
        回溯,撤销处理结果
    }
}

解题

/**
 * @param {number} n
 * @param {number} k
 * @return {number[][]}
 */
var combine = function (n, k) {
  const res = []
  const path = []
  function bfs(start) {
    if (path.length === k) {
      res.push([...path])
      return
    }
    for (var i = start; i <= n - (k - path.length) + 1; i++) {
      path.push(i) // 处理节点
      bfs(i + 1) // 递归处理
      path.pop() // 回溯,撤销处理的节点
    }
  }
  bfs(1)
  return res
}

文章作者: 高红翔
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 高红翔 !
  目录