254. 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:
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: Backtracking

lang: 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
32
33
class Solution {
public List<List<Integer>> getFactors(int n) {
List<List<Integer>> res = new ArrayList<>();
List<Integer> current = new ArrayList<>();
if (n <= 2) return res;
helper(n, 2, current, res);
return res;
}
private void helper(int n, int start, List<Integer> current, List<List<Integer>> res) {
if (n <= 0) {
return;
}
if (n == 1) {
if (current.size() > 1) {
res.add(new ArrayList<Integer>(current));
return;
}
}
for (int i = start; i <= n; i++) {
if (n % i == 0) {
current.add(i);
helper(n / i, i, current, res);
current.remove(current.size() - 1);
}
}
return;
}
}