题目大意
解题思路
用递归的思路很简单,只需要将不重复的数字一次push进当前的vector就行,当vector的大小等于k的时候,就将结果记录下来。
代码
class Solution {
public:
vector<vector<int>> combine(int n, int k) {
vector<vector<int>> resultVec;
vector<int> singleVec;
getCombs(resultVec, singleVec, 1, k, n);
return resultVec;
}
private:
void getCombs(vector<vector<int>> &resVec, vector<int> singleComb, int beginInd, int vecSize, int numSize) {
if (singleComb.size() == vecSize) {
resVec.push_back(singleComb);
return;
}
for (int i = beginInd; i <= numSize; i++) {
singleComb.push_back(i);
getCombs(resVec, singleComb, i + 1, vecSize, numSize);
singleComb.pop_back();
}
}
};
记录一个更快更简短的方法
class Solution {
public:
vector<vector<int>> combine(int n, int k) {
vector<vector<int>> result;
int i = 0;
vector<int> p(k, 0);
while (i >= 0) {
p[i]++;
if (p[i] > n) --i;
else if (i == k - 1) result.push_back(p);
else {
++i;
p[i] = p[i - 1];
}
}
return result;
}
};