【LeetCode】77. 组合

  1. 组合

ts 尾递归

function combine(n: number, k: number): number[][] {
    const add = (arr: number[][], max: number): number[][] => {
        let _max = Math.min(max + 1, n)
        let _arr: number[][] = new Array()
        arr.forEach(e => {
            const st = e.length ? e[e.length - 1] + 1 : 1
            for (let i = st; i <= _max; i++) {
                _arr.push([...e, i])
            }
        })
        if (_arr[0].length === k) {
            return _arr
        } else {
            return add(_arr, _max)
        }
    }
    return add([[]], n - k)
}

ts 动态规划

function combine(n: number, k: number): number[][] {
  let arr: number[][] = new Array()
  const add = (_arr: number[], max: number) => {
    if (_arr.length === k) {
      arr.push(_arr)
    }else{
      const _max = Math.min(max + 1, n)
      const st = _arr.length ? _arr[_arr.length - 1] : 0
      for (let index = st; index < _max; index++) {
        add([..._arr, index + 1], max + 1)
      }
    }
  }
  add([], n - k)
  return arr
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值