题目

给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。

思路

image.png

  1. var combine = function(n, k) {
  2. let res =[];
  3. let path =[];
  4. const backTracing =function(n,k,startIndex){
  5. if(path.length ===k){
  6. // 用slice效率更高?
  7. // res.push(path.slice());
  8. // 如果不进行拷贝,则push的是一个array引用,但path最后会是空(被全部pop)
  9. res.push([...path]);
  10. return;
  11. }
  12. // i的范围运用了剪枝思想
  13. for(let i =startIndex;i<=n-(k-path.length)+1;i++){
  14. path.push(i);
  15. backTracing(n,k,i+1);
  16. path.pop();
  17. }
  18. }
  19. backTracing(n,k,1);
  20. // console.log(res);
  21. return res;
  22. };