-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path77. 组合.js
47 lines (46 loc) · 1.22 KB
/
77. 组合.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// 回溯
/**
* @param {number} n
* @param {number} k
* @return {number[][]}
*/
var combine = function(n, k) {
let rz = [];
let path = [];
const backTracking = function(n, k, startIndex) { // startIndex用来记录下一层递归,搜索的起始位置
if (path.length === k) {
rz.push([...path]);
return;
}
for (let i = startIndex; i <= n; i++) { // 控制树的横向遍历
path.push(i); // 处理节点
backTracking(n, k, i + 1); // 递归:控制树的纵向遍历,下一层搜索从i+1开始
path.pop(); // 回溯,撤销处理的节点
}
}
backTracking(n, k, 1);
return rz;
};
// 剪枝优化
/**
* @param {number} n
* @param {number} k
* @return {number[][]}
*/
var combine = function(n, k) {
let rz = [];
let path = [];
const backTracking = function(n, k, startIndex) {
if (path.length === k) {
rz.push([...path]);
return;
}
for (let i = startIndex; i <= n - (k - path.length) + 1; i++) { // 剪枝
path.push(i);
backTracking(n, k, i + 1);
path.pop();
}
}
backTracking(n, k, 1);
return rz;
};