Skip to content

Commit 5e6a657

Browse files
refactor: 0216.组合总和III.md
1 parent d1d7cde commit 5e6a657

File tree

1 file changed

+68
-25
lines changed

1 file changed

+68
-25
lines changed

problems/0216.组合总和III.md

Lines changed: 68 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -417,39 +417,82 @@ func dfs(k, n int, start int, sum int) {
417417
```
418418

419419
### JavaScript
420+
- 未剪枝:
420421

421422
```js
422423
/**
423424
* @param {number} k
424425
* @param {number} n
425426
* @return {number[][]}
426427
*/
427-
var combinationSum3 = function(k, n) {
428-
let res = [];
429-
let path = [];
430-
let sum = 0;
431-
const dfs = (path,index) => {
432-
// 剪枝操作
433-
if (sum > n){
434-
return
435-
}
436-
if (path.length == k) {
437-
if(sum == n){
438-
res.push([...path]);
439-
return
440-
}
441-
}
442-
for (let i = index; i <= 9 - (k-path.length) + 1;i++) {
443-
path.push(i);
444-
sum = sum + i;
445-
index += 1;
446-
dfs(path,index);
447-
sum -= i
448-
path.pop()
449-
}
428+
var combinationSum3 = function (k, n) {
429+
// 回溯法
430+
let result = [],
431+
path = [];
432+
const backtracking = (_k, targetSum, sum, startIndex) => {
433+
// 终止条件
434+
if (path.length === _k) {
435+
if (sum === targetSum) {
436+
result.push(path.slice());
437+
}
438+
// 如果总和不相等,就直接返回
439+
return;
450440
}
451-
dfs(path,1);
452-
return res
441+
442+
// 循环当前节点,因为只使用数字1到9,所以最大是9
443+
for (let i = startIndex; i <= 9; i++) {
444+
path.push(i);
445+
sum += i;
446+
// 回调函数
447+
backtracking(_k, targetSum, sum, i + 1);
448+
// 回溯
449+
sum -= i;
450+
path.pop();
451+
}
452+
};
453+
backtracking(k, n, 0, 1);
454+
return result;
455+
};
456+
```
457+
458+
- 剪枝:
459+
460+
```js
461+
/**
462+
* @param {number} k
463+
* @param {number} n
464+
* @return {number[][]}
465+
*/
466+
var combinationSum3 = function (k, n) {
467+
// 回溯法
468+
let result = [],
469+
path = [];
470+
const backtracking = (_k, targetSum, sum, startIndex) => {
471+
if (sum > targetSum) {
472+
return;
473+
}
474+
// 终止条件
475+
if (path.length === _k) {
476+
if (sum === targetSum) {
477+
result.push(path.slice());
478+
}
479+
// 如果总和不相等,就直接返回
480+
return;
481+
}
482+
483+
// 循环当前节点,因为只使用数字1到9,所以最大是9
484+
for (let i = startIndex; i <= 9 - (_k - path.length) + 1; i++) {
485+
path.push(i);
486+
sum += i;
487+
// 回调函数
488+
backtracking(_k, targetSum, sum, i + 1);
489+
// 回溯
490+
sum -= i;
491+
path.pop();
492+
}
493+
};
494+
backtracking(k, n, 0, 1);
495+
return result;
453496
};
454497
```
455498

0 commit comments

Comments
 (0)