mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-12 21:50:49 +08:00
refactor: 0216.组合总和III.md
This commit is contained in:
@ -417,6 +417,7 @@ func dfs(k, n int, start int, sum int) {
|
|||||||
```
|
```
|
||||||
|
|
||||||
### JavaScript
|
### JavaScript
|
||||||
|
- 未剪枝:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
/**
|
/**
|
||||||
@ -424,32 +425,74 @@ func dfs(k, n int, start int, sum int) {
|
|||||||
* @param {number} n
|
* @param {number} n
|
||||||
* @return {number[][]}
|
* @return {number[][]}
|
||||||
*/
|
*/
|
||||||
var combinationSum3 = function(k, n) {
|
var combinationSum3 = function (k, n) {
|
||||||
let res = [];
|
// 回溯法
|
||||||
let path = [];
|
let result = [],
|
||||||
let sum = 0;
|
path = [];
|
||||||
const dfs = (path,index) => {
|
const backtracking = (_k, targetSum, sum, startIndex) => {
|
||||||
// 剪枝操作
|
// 终止条件
|
||||||
if (sum > n){
|
if (path.length === _k) {
|
||||||
return
|
if (sum === targetSum) {
|
||||||
}
|
result.push(path.slice());
|
||||||
if (path.length == k) {
|
}
|
||||||
if(sum == n){
|
// 如果总和不相等,就直接返回
|
||||||
res.push([...path]);
|
return;
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (let i = index; i <= 9 - (k-path.length) + 1;i++) {
|
|
||||||
path.push(i);
|
|
||||||
sum = sum + i;
|
|
||||||
index += 1;
|
|
||||||
dfs(path,index);
|
|
||||||
sum -= i
|
|
||||||
path.pop()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
dfs(path,1);
|
|
||||||
return res
|
// 循环当前节点,因为只使用数字1到9,所以最大是9
|
||||||
|
for (let i = startIndex; i <= 9; i++) {
|
||||||
|
path.push(i);
|
||||||
|
sum += i;
|
||||||
|
// 回调函数
|
||||||
|
backtracking(_k, targetSum, sum, i + 1);
|
||||||
|
// 回溯
|
||||||
|
sum -= i;
|
||||||
|
path.pop();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
backtracking(k, n, 0, 1);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
- 剪枝:
|
||||||
|
|
||||||
|
```js
|
||||||
|
/**
|
||||||
|
* @param {number} k
|
||||||
|
* @param {number} n
|
||||||
|
* @return {number[][]}
|
||||||
|
*/
|
||||||
|
var combinationSum3 = function (k, n) {
|
||||||
|
// 回溯法
|
||||||
|
let result = [],
|
||||||
|
path = [];
|
||||||
|
const backtracking = (_k, targetSum, sum, startIndex) => {
|
||||||
|
if (sum > targetSum) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 终止条件
|
||||||
|
if (path.length === _k) {
|
||||||
|
if (sum === targetSum) {
|
||||||
|
result.push(path.slice());
|
||||||
|
}
|
||||||
|
// 如果总和不相等,就直接返回
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 循环当前节点,因为只使用数字1到9,所以最大是9
|
||||||
|
for (let i = startIndex; i <= 9 - (_k - path.length) + 1; i++) {
|
||||||
|
path.push(i);
|
||||||
|
sum += i;
|
||||||
|
// 回调函数
|
||||||
|
backtracking(_k, targetSum, sum, i + 1);
|
||||||
|
// 回溯
|
||||||
|
sum -= i;
|
||||||
|
path.pop();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
backtracking(k, n, 0, 1);
|
||||||
|
return result;
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user