-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCombinations
More file actions
37 lines (33 loc) · 1.26 KB
/
Combinations
File metadata and controls
37 lines (33 loc) · 1.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Given two integers n and k, return all possible combinations of k numbers chosen from the range [1, n].
You may return the answer in any order.
Example 1:
Input: n = 4, k = 2
Output: [[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]]
Explanation: There are 4 choose 2 = 6 total combinations.
Note that combinations are unordered, i.e., [1,2] and [2,1] are considered to be the same combination.
Example 2:
Input: n = 1, k = 1
Output: [[1]]
Explanation: There is 1 choose 1 = 1 total combination.
------------------------------------------------------------------------------------------------------------------------------
// tc=O(C(n,k)*k) sc=O(k) auxiliary
class Solution {
public:
vector<vector<int>> combine(int n, int k) {
vector<int>res;
vector<vector<int>>ans;
solve(1, n, k, res, ans);
return ans;
}
void solve(int idx, int n, int k, vector<int>&res, vector<vector<int>>& ans){
if(res.size()==k){
ans.push_back(res);
return; // if you dont use this then the tc=O(2^n) sc=O(k) if we dont use return then ou continue recursion even after res.size() == k.
}
for(int i=idx;i<=n;i++){
res.push_back(i);
solve(i+1, n,k,res,ans);
res.pop_back();
}
}
};