day24打卡
思路:画出决策树,暴力枚举。子集问题
决策树:
函数头:void dfs(int n, int k, int pos)
函数体:
出口:全局变量count == k 保存结果到全局变量ret中
子问题:从pos位置向后变量,取出每个数,count++即可。
回溯:出递归函数后,pop新增的元素,并且count–。
示例代码:
class Solution {
public:
vector<vector<int>> ret;
vector<int> path;
int count = 0;
vector<vector<int>> combine(int n, int k) {
dfs(n, k, 1);
return ret;
}
void dfs(int n, int k, int pos)
{
//递归出口
if(count == k)
{
ret.push_back(path);
return;
}
//子问题
for(int i = pos; i <= n; i++)
{
path.push_back(i);
count++;
dfs(n, k, i+1);
//回溯
path.pop_back();
count--;
}
}
};
count--;
}
}
};