Skip to content

Commit e7529aa

Browse files
authored
重写 0216.组合总和III JavaScript 版本代码
原代码冗余,建议重写
1 parent e07a3ca commit e7529aa

File tree

1 file changed

+18
-27
lines changed

1 file changed

+18
-27
lines changed

problems/0216.组合总和III.md

Lines changed: 18 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -360,39 +360,30 @@ func backTree(n,k,startIndex int,track *[]int,result *[][]int){
360360
## javaScript
361361

362362
```js
363-
// 等差数列
364-
var maxV = k => k * (9 + 10 - k) / 2;
365-
var minV = k => k * (1 + k) / 2;
363+
/**
364+
* @param {number} k
365+
* @param {number} n
366+
* @return {number[][]}
367+
*/
366368
var combinationSum3 = function(k, n) {
367-
if (k > 9 || k < 1) return [];
368-
// if (n > maxV(k) || n < minV(k)) return [];
369-
// if (n === maxV(k)) return [Array.from({length: k}).map((v, i) => 9 - i)];
370-
// if (n === minV(k)) return [Array.from({length: k}).map((v, i) => i + 1)];
371-
372-
const res = [], path = [];
373-
backtracking(k, n, 1, 0);
374-
return res;
375-
function backtracking(k, n, i, sum){
376-
const len = path.length;
377-
if (len > k || sum > n) return;
378-
if (maxV(k - len) < n - sum) return;
379-
if (minV(k - len) > n - sum) return;
380-
381-
if(len === k && sum == n) {
382-
res.push(Array.from(path));
369+
const backtrack = (start) => {
370+
const l = path.length;
371+
if (l === k) {
372+
const sum = path.reduce((a, b) => a + b);
373+
if (sum === n) {
374+
res.push([...path]);
375+
}
383376
return;
384377
}
385-
386-
const min = Math.min(n - sum, 9 + len - k + 1);
387-
388-
for(let a = i; a <= min; a++) {
389-
path.push(a);
390-
sum += a;
391-
backtracking(k, n, a + 1, sum);
378+
for (let i = start; i <= 9 - (k - l) + 1; i++) {
379+
path.push(i);
380+
backtrack(i + 1);
392381
path.pop();
393-
sum -= a;
394382
}
395383
}
384+
let res = [], path = [];
385+
backtrack(1);
386+
return res;
396387
};
397388
```
398389

0 commit comments

Comments
 (0)