@@ -360,39 +360,30 @@ func backTree(n,k,startIndex int,track *[]int,result *[][]int){
360
360
## javaScript
361
361
362
362
``` 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
+ */
366
368
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
+ }
383
376
return ;
384
377
}
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 );
392
381
path .pop ();
393
- sum -= a;
394
382
}
395
383
}
384
+ let res = [], path = [];
385
+ backtrack (1 );
386
+ return res;
396
387
};
397
388
```
398
389
0 commit comments