Input: n = 4, k = 2
Output:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
vector<vector<int>> combine(int n, int k) { // time: O(C(n, k)); space: O(C(n, k))
vector<vector<int> > res;
vector<int> cur;
helper(res, cur, n, k, 1);
return res;
}
void helper(vector<vector<int> >& res, vector<int>& cur, int n, int k, int start) {
if (cur.size() >= k) {
res.push_back(cur);
} else {
for (int i = start; i <= n; ++i) {
cur.push_back(i);
helper(res, cur, n, k, i + 1);
cur.pop_back();
}
}
}
vector<vector<int>> combine(int n, int k) { // time: O(C(n, k)); space: O(C(n, k))
vector<vector<int> > res;
vector<int> cur(k, 0);
int i = 0;
while (i >= 0) {
++cur[i];
if (cur[i] > n) {
--i;
} else if (i == k - 1) {
res.push_back(cur);
} else {
++i;
cur[i] = cur[i - 1];
}
}
return res;
}