- 组合
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
}