zlx362211854 / daily-study

每日一个知识点总结,以issue的形式体现
10 stars 6 forks source link

128. 回溯算法 #185

Open goldEli opened 4 years ago

goldEli commented 4 years ago

随机给出两个正整数(n 和 k), 返回 1~n 中所有可能性的 k 个数组合,比如

输入: n = 4, k = 2
输出:
[
  [1,2],
  [1,3],
  [1,4],
  [2,4],
  [2,3],
  [3,4],
]
/**
 * @param {number} n
 * @param {number} k
 * @return {number[][]}
 */
var combine = function(n, k) {

};
goldEli commented 4 years ago
/**
 * @param {number} n
 * @param {number} k
 * @return {number[][]}
 */

var combine = function(n, k) {
    var res = []

    function step(start, item) {
        if (item.length === k) {
            res.push([...item])
            return
        }
        for (let i = start; i < n+1; ++i) {
            // 加入第一个数
            item.push(i)
            // 加入第二个数
            step(i+1, item)
            // 回退
            item.pop()
        }
    }

    step(1, [])

    return res
};