三刷254. Factor Combinations

很典型的dfs题,有几个地方容易出错:

  • 下一次搜索可以从当前数字开始,但不能比当前数字更小:12 [2,2,3] works, 没说后面的必须比前面的大,这点就是startNum参数的用处以及为什么dfsHelper(res, list, n, product*i, i);这句code中紧接着搜索的数字是i而不是i+1
  • Factor的基本概念,哪些数才能有资格加进去?肯定是必须能整除n的数,不雅瞎加。
    剩下的就是很典型的dfs+backtracking了。
class Solution {
    public List<List<Integer>> getFactors(int n) {
        List<List<Integer>> res = new ArrayList<>();
        if (n == 1){
            return res;
        }
        List<Integer> list = new ArrayList<>();
        dfsHelper(res, list, n, 1, 2);
        return res;
    }
    
    private void dfsHelper(List<List<Integer>> res, List<Integer> list, int n, int product, int startNum){
        if (product == n){
            res.add(new ArrayList<Integer>(list));
            return;
        }
        if (product > n || startNum > n){
            return;
        }
        for (int i = startNum; i < n; i++){
            if (i*product > n){
                return;
            }
            if (n % i == 0){
                list.add(i);
                dfsHelper(res, list, n, product*i, i);
                list.remove(list.size() - 1);
            }
        }
    }
}
    原文作者:greatfulltime
    原文地址: https://www.jianshu.com/p/32a32d0ba688
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞