题目描述:
Given two integers n and k, return all possible combinations of k numbers out of 1 ... n.
Example
题目思路:
For example,
If n = 4 and k = 2, a solution is:
[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4]]
这题我就用recursion做了,每次都挑一个数放入vector sofar中,看看是不是符合要求,如果符合要求就塞到ans中。
Mycode(AC = 16ms):
class Solution {
public:
/**
* @param n: Given the range of numbers
* @param k: Given the numbers of combinations
* @return: All the combinations of k numbers out of 1..n
*/
vector<vector<int> > combine(int n, int k) {
// write your code here
vector<vector<int>> ans;
if (k == 0) return ans;
vector<int> sofar;
combine(ans, sofar, n, k, 1);
return ans;
}
void combine(vector<vector<int>>& ans,
vector<int>& sofar,
int n,
int k,
int start)
{
if (k == 0) {
ans.push_back(sofar);
return;
}
for (int i = start; i <= n; i++) {
sofar.push_back(i);
combine(ans, sofar, n, k - 1, i + 1);
sofar.pop_back();
}
}
};