LeetCode: Factor Combinations

LeetCode: Factor Combinations

Numbers can be regarded as product of its factors. For example,

1
2
8 = 2 x 2 x 2;
= 2 x 4.

Write a function that takes an integer n and return all possible combinations of its factors.

Note:

Each combination’s factors must be sorted ascending, for example: The factors of 2 and 6 is [2, 6], not [6, 2].

You may assume that n is always positive.

Factors should be greater than 1 and less than n.

Examples:

input: 1

output:

1
[]

input: 37

output:

1
[]

input: 12

output:

1
2
3
4
5
[
[2, 6],
[2, 2, 3],
[3, 4]
]

input: 32

output:

1
2
3
4
5
6
7
8
[
[2, 16],
[2, 2, 8],
[2, 2, 2, 4],
[2, 2, 2, 2, 2],
[2, 4, 4],
[4, 8]
]
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
38
39
40
public class Solution {
public List<List<Integer>> getFactors(int n) {
Set<List<Integer>> result = new HashSet<>();

int dist = (int) Math.sqrt(n);

for (int i = 2; i <= dist; i++) {
if (n % i == 0) {
List<List<Integer>> tmp = helper(n / i);
for (List<Integer> l : tmp) {
l.add(i);
Collections.sort(l);
result.add(l);
}
}
}
return new ArrayList<>(result);
}

public List<List<Integer>> helper(int n) {
List<List<Integer>> result = new ArrayList<>();

List<Integer> t = new ArrayList<>();
t.add(n);
result.add(t);

int dist = (int) Math.sqrt(n);

for (int i = 2; i <= dist; i++) {
if (n % i == 0) {
List<List<Integer>> tmp = helper(n / i);
for (List<Integer> l : tmp) {
l.add(i);
result.add(l);
}
}
}
return result;
}
}