77.组合
题目:给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。
示例:
输入: n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
class Solution {
private:
vector<vector<int>> result;
vector<int> path;
void backtrack(int n, int k, int startIndex)
{
//长度相等时找到了答案,存入result
if(path.size() == k)
{
result.push_back(path);
return;
}
//for循环横向遍历
for(int i = startIndex; i <= n; i++)
{
//将当前结点存入
path.push_back(i);
//回溯,纵向遍历
backtrack(n, k, i+1);
//每次回溯完之后,要撤销上一次存入的数据,以便进行下一次操作
path.pop_back();
}
}
public:
vector<vector<int>> combine(int n, int k) {
backtrack(n, k, 1);
return result;
}
};