[LinkedIn]Combination factors
Linkedin 的一道题目
Keep track of the current remain factor to be decomposed, LargestFactor is the largest possible factor to decompose (so that we don’t need to try anything larger than that).
For each level we try to decompose the current remaining factor.
import java.util.*;
public class Test {
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);
}
}
}
public static void main(String[] args) {
Test t = new Test();
List<List<Integer>> l = t.factorCombinations(24);
for (List<Integer> li : l) {
for (Integer i : li) {
System.out.print(i+" ");
}
System.out.println();
}
}
}