254. Factor Combinations
就是backtracking
1 public List<List<Integer>> getFactors(int n) { 2 List<List<Integer>> res = new ArrayList<List<Integer>>(); 3 helper(res, new ArrayList<Integer>(), n, 2); 4 return res; 5 } 6 7 private void helper(List<List<Integer>> res, List<Integer> item, int n, int start) { 8 for(int i = start; i * i <= n; i++) { 9 if(n % i == 0) { 10 item.add(i); 11 List<Integer> curComb = new ArrayList<Integer>(item); 12 curComb.add(n / i); 13 res.add(curComb); 14 helper(res, item, n / i, i); 15 item.remove(item.size() - 1); 16 } 17 } 18 }
要注意的是
helper函数需要有一个int start记录开始的点,不然比如说分解12的时候会有重复,[2,2,3],[3,2,2]会变成两组加进去,所以每次分解的时候不能比上一次的factor大