leetcode 77 组合
一、问题描述
二、解题思路
整体思路
画出本题的决策树,我们可以用回溯的方法来解决这个问题。本题的决策树与leetcode 78 子集-CSDN博客解法二的决策树一样,只不过决策树的层数为k。
具体思路
(1)函数功能:dfs函数用于从nums数组的第start个位置(下标)开始寻找所有的组合;
(2)递归出口:当path.size()==k,将path加入ret,然后return;
(2)函数体:
<1>从start开始寻找所有的子集,直到start越界;
<2>将当前位置的值加入path向量;
<3>dfs处理i后面的位置(而不是start后面的位置);
<4>恢复现场;
三、代码实现
class Solution {vector<vector<int>> ret;vector<int> path;
public:vector<vector<int>> combine(int n, int k) {dfs(n,1,k);return ret;}void dfs(int n,int start,int k){//递归出口if(path.size()==k){ret.push_back(path);return ;}for(int i=start;i<=n;i++){path.push_back(i);dfs(n,i+1,k);//恢复现场path.pop_back();}}
};