1.8 KiB
1.8 KiB
Leetcode Combinations
2022-07-19 20:09
Algorithms:
#algorithm #backtrack
Difficulty:
#coding_problem #difficulty-medium
Additional tags:
#leetcode #CS_list_need_understanding
Revisions:
N/A
Related topics:
Links:
Problem
Given two integers n
and k
, return all possible combinations of k
numbers out of the range [1, n]
.
You may return the answer in any order.
Examples
Example 1:
**Input:** n = 4, k = 2
**Output:**
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
Example 2:
**Input:** n = 1, k = 1
**Output:** [[1]]
Constraints
Constraints:
1 <= n <= 20
1 <= k <= n
Thoughts
[!summary] This is a #backtrack problem
The link I mentioned on the links section already have a good explanation on the topic.
In my eyes, backtracking means DFS-like recursion and searching in solving problems.
First, it add a option in the combinations, then backtrack it And when it's done, it gets poped out and try another solution, and backtrack.
Solution
Backtracking
class Solution {
void backtrack(vector<vector<int>> &ans, vector<int> &combs, int n, int nex,
int k) {
if (k == 0) {
ans.push_back(combs);
} else {
// try different solutions
for (int i = nex; i <= n; i++) {
combs.push_back(i);
backtrack(ans, combs, n, i + 1, k - 1);
combs.pop_back();
}
}
}
public:
vector<vector<int>> combine(int n, int k) {
vector<vector<int>> ans = {};
vector<int> combs = {};
backtrack(ans, combs, n, 1, k);
return ans;
}
};