Question
A question by dongfeiwww:
打印一个数的所有乘数组合,从大到小,不要有重复
Print all unique combinations of factors of a positive integer. For example given 24:
24*1
12*2
8*3
6*4
6*2*2
4*3*2
3*2*2*2
Solution
Simple DFS.
Code
public List<List<Integer>> factorCombinations(int n) {
List<List<Integer>> ans = new ArrayList<List<Integer>>();
helper(ans, n, n / 2, new ArrayList<Integer>());
return ans;
}
private void helper(List<List<Integer>> ans, int num, int largestFactor,
List<Integer> path) {
if (num == 1) {
ans.add(new ArrayList<Integer>(path));
return;
}
for (int i = largestFactor; i > 1; i--) {
if (num % i == 0) {
path.add(i);
helper(ans, num / i, i, path);
path.remove(path.size() - 1);
}
}
}