给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。
示例:
输入: n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
回溯算法:
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
vector<vector<int>> combine(int n, int k) {
vector<vector<int>>res;
vector<int> tar;
backTrace(0,n,tar,k,res);
return res;
}
void backTrace(int first,int n,vector<int>&dest, int k, vector<vector<int>>& res){
if(dest.size()==k){
res.push_back(dest);
return;
}
for(int i=first+1;i<=n;i++){
vector<int>tmp (dest);
dest.push_back(i);
backTrace(i,n,dest,k,res);
dest = tmp;
}
}
};
int main(){
Solution *ps = new Solution();
vector<vector<int>>res = ps->combine(4,3);
for(int i=0;i<res.size();i++){
vector<int> it = res[i];
for(int j=0;j<it.size();j++){
cout<<it[j];
}
cout<<endl;
}
return 0;
}