forked from anishLearnsToCode/leetcode-algorithms
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Combinations.java
31 lines (27 loc) · 1 KB
/
Combinations.java
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
// https://leetcode.com/problems/combinations
// T: O(k * 2^n)
// S: O(k)
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class Combinations {
public List<List<Integer>> combine(int n, int k) {
final List<List<Integer>> result = new ArrayList<>();
createCombinations(n, k, result);
return result;
}
private void createCombinations(int n, int k, List<List<Integer>> result) {
addCombinations(n, 1, k, result, new LinkedList<>());
}
private void addCombinations(int n, int current, int length, List<List<Integer>> result, LinkedList<Integer> combination) {
if (combination.size() == length) {
result.add(new ArrayList<>(combination));
return;
}
if (current > n) return;
combination.add(current);
addCombinations(n, current + 1, length, result, combination);
combination.removeLast();
addCombinations(n, current + 1, length, result, combination);
}
}