原题
https://leetcode-cn.com/problems/combinations/
解题思路
典型的回溯。
代码
/**
* @param {number} n
* @param {number} k
* @return {number[][]}
*/
var combine = function(n, k) {
const resArr = [];
if (k > n) return resArr;
const backTrace = (arr, m) => {
if (m >= k) {
resArr.push(arr);
return;
}
for (let i = m + 1; i <= n; ++i) {
if (!arr.length || i > arr[arr.length-1]) {
arr.push(i);
backTrace(arr.slice(), m + 1);
arr.pop();
}
}
}
backTrace([], 0);
return resArr;
};
复杂度
- 时间复杂度 O(k*Cnk) Cnk = N!/((N-k)!k!)
- 空间复杂度 O(Cnk)
网友评论