leetcode77-组合

leetcode 77
在这里插入图片描述

思路

组合问题需要用到回溯,假设n = 4,k = 2,从1开始,path表示每一层的收集值,选中1以后,下一个数就需要从2开始,我们startIndex表示开始的位置,1->2以后我们收集到的结果满足k了就需要存放到result最终结果集中,⚠️:结果集存放的时候不要直接push(path),因为path是存的地址,如果path后序改变,也会影响这个存入的数据,所以需要拷贝一份出来存储
存放以后我们需要再回退到1的位置去继续找后面的数字存储,由于有一个回退的操作,我们需要path.pop,这样就再次回到了path = [1],然后startIndex = 3,这样就继续往后面找数,就能实现回溯找到所有的组合值

实现

var combine = function (n, k) {
    let result = [], path = [];
    const backtracking = (n, k, startIndex) => {
        if (path.length === k) {
            // 此路径收集完成
            result.push([...path]);
            return
        }
        for (let i = startIndex; i <= n; i++) {
            path.push(i);
            backtracking(n, k, i + 1)
            path.pop();
        }
    }
    backtracking(n, k, 1)
    return result;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值