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
);
}
}
}
转载于:https://www.cnblogs.com/hygeia/p/5151017.html
相关资源:因式分解实现算法