Given two integers n and k, return all possible combinations of k numbers out of 1 ... n.
For example,
If n = 4 and k = 2, a solution is:
[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]
Subscribe to see which companies asked this question.
找出一个序列中全部的长度为k的子序列。使用dfs的方法,分支为取当前的数和不取当前的数。当长度为k时添加到结果集中。
代码:
class Solution
{
public:
vector<vector<int>> combine(int n, int k)
{
vector<int> tmp;
dfs(tmp, 1, n, k);
return res;
}
private:
vector<vector<int>> res;
void dfs(vector<int> &tmp, int m, int n, int k)
{
if(tmp.size() == k)
{
res.push_back(tmp);
return;
}
if(m > n)
{
return;
}
tmp.push_back(m);
dfs(tmp, m+1, n, k);
tmp.pop_back();
dfs(tmp, m+1, n, k);
}
};