给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。
示例:
输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]
class Solution {
public:
vector<vector<int>> result;
vector<vector<int>> combine(int n, int k) {
vector <int> path;
dfs(path,1,n,k);// 在这里我们开始定义结果
return result;
}
void dfs(vector<int> &path , int start, int n, int k) {
// K 代表着还有多少个数据没有选出来
// start 代表着起始位置
// n 为总数
if(!k) {// 如果已经遍历结束的话就把结果存下来
result.push_back(path); // 把数据存下来
return;
}
for(int i =start; i<=n; i++){ // 从start 的位置开始
path.push_back(i); //
dfs(path,i+1,n,k-1);// 下一次递归应该是从 i+1 的位置进行查找,并且 查找的数据值为 k-1;
path.pop_back();// 回溯掉,确保下一次遍历的不是这一个分支。。。
}
}
// 加油加油,Try to make yourself more excellent...
};