思路:

  • 递归函数形参和返回值
  • 确认终止条件
  • 单层递归逻辑

题型一:

组合

image.png
思路:
递归
通过递归,边界条件是需要放入的数据达到长度需要。

  1. var combine = function(n, k) {
  2. var result = [];
  3. var path =[];
  4. function backtracking(n,k,startIndex){
  5. if(path.length==k){//数量达到需要
  6. result.push(path.slice());//放入数据
  7. return;//打断递归
  8. }
  9. for(let i = startIndex;i<=n;i++){
  10. path.push(i);//放入path之一
  11. backtracking(n,k,i+1);//递归
  12. path.pop();//path去掉上一次的结果
  13. }
  14. }
  15. backtracking(n,k,1);
  16. return result;
  17. };

在做该题时遇到了一个问题,那就是当我写的为push(path)时,push进去的却是[],百思不得其解后,我发现有篇回答下面有这个问题的解决方法,那就是使用path.slice()
image.png
原因如上,感谢大佬能够解决问题。