problem:
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], ]
这个题目我的思路是先将待组合的数字用vector的形式表达出来,再用深度优先搜索方法得到所有可能的结果即可。
class Solution {
public:
void dfs(vector<vector<int> >& result, vector<int> nums, vector<int>& temp, int start, int left)
{
if(left == 0)
{
result.push_back(temp);
return;
}
int length = temp.size();
for(int i=start; i<=(nums.size()-left); i++)
{
int test0 = length-left;
temp[length-left] = nums[i];
int test1 = temp[length-left];
dfs(result, nums, temp, i+1, left-1);
}
}
vector<vector<int> > combine(int n, int k) {
vector<vector<int> > result;
//create array
vector<int> nums;
if(n==0 || k==0)
return result;
for(int i=1; i<=n; i++)
{
nums.push_back(i);
}
vector<int> temp(k, 0);
int test3=temp[0];
int test4=temp[1];
dfs(result, nums, temp, 0, k);
return result;
}
};