最近学习暴力枚举法的相关知识,首先学习的是增量构造法,该方法的精髓在于首先获取原始资料的特征,是否重复,重复后各个数字出现的次数等,然后再按照一定的构造方法去进行深度搜索,其实也就是在决定每一个数据是否出现在所构成的排列中~
收敛条件是达到了排列所需的个数(所求排列长度固定的情况) 或者所有的元素都已经进行了排列组合的筛选。
class Solution {
public:
vector<vector<int>> combine(int n, int k) {
vector<vector<int> > result;
vector<int> path;
dfs(n,k,1,path,result);
return result;
}
private:
void dfs(int n, int k, int start,vector<int> &path, vector<vector<int>> &result){
if(path.size() == k){
result.push_back(path);
}
for(int i = start; i <=n; ++i){
path.push_back(i);
dfs(n,k, i+1, path,result);
path.pop_back();
}
}
};