思路
-
递归。数组的size为k时,添加到结果集。
-
迭代。还是递归的思路,只不过将递归转化为迭代而已。i对应cur。
代码
递归
class Solution {
public:
vector<vector<int>> combine(int n, int k) {
if (!k) return {{}};
if (!n) return {};
vector<vector<int>> rs;
vector<int> com;
dfs(rs, n, com, k, 1);
return rs;
}
void dfs(vector<vector<int>> &rs, int n, vector<int> &com, int k, int cur) {
if (com.size() == k) {
rs.push_back(com);
return ;
}
for (int i = cur; i <= n; ++i) {
com.push_back(i);
dfs(rs, n, com, k, i + 1);
com.pop_back();
}
}
};
迭代
class Solution {
public:
vector<vector<int>> combine(int n, int k) {
vector<vector<int>> rs;
if (n < k) return rs;
vector<int> com(k, 0);
int i = 0;
while (i >= 0) {
++com[i];
if (com[i] > n) --i;
else if (i == k - 1) rs.push_back(com);
else {
++i;
com[i] = com[i-1];
}
}
return rs;
}
};