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大

posted @ 2016-08-11 04:54  warmland  阅读(166)  评论(0编辑  收藏  举报