回溯法;组合问题
//回溯法解决组合类问题
#include <iostream>
#include <vector>
using namespace std;
/*
问题描述:给定两个数字n和k,求在1...n这n个数字中选出k个数字所有组合。
思考:大体参见排列类问题。
*/
class Solution{
private:
vector<vector<int>> res;
//从start位置开始找新的元素,已有的组合存储在c中
void generateCombination(int n,int k,int start,vector<int> &c){
if(c.size()==k){
res.push_back(c);
return ;
}
for(int i=start;i<n;i++){
c.push_back(i);
generateCombination(n,k,i+1,c);
//回溯
c.pop_back(i);
}
}
public:
vector<vector<int>> combine(int n,int k){
res.clear();
if(n<=0 || k<=0 ||k>n){
return res;
}
vector<int> c;
generateCombination(n,k,1,c);
return res;
}
};
int main(){
return 0;
}