254. Factor Combinations

https://leetcode.com/problems/factor-combinations/description/

image.png

首先我们想,我们就从2开始找,这样可以找到第一个最小的因子。随后可以除掉这个因子对吧。接着往后找其他的第一个。这样会遇到一个问题,比如6,=23,6=32;根据题目意思只要一个就可以了,那么就要去重。我们就想到,找到第一个最小的因子后,再往后找,但深入到找第二个因子的时候一定不能小于前面一个。这样就不会有重复了。
所以我们可以写出一个DFS。
举个例子,32,找到2后,一开始不断用2深入。得到22222,回溯出来,2224;四比二大的。再回溯出来 2242,这里这个2因为比4小,构不成的。依次类推。

List<List<Integer>> res = new ArrayList<>();
    public List<List<Integer>> getFactors(int n){
        help(new ArrayList<>(),2,n);
        return res;
    }
    
    private void help(List<Integer> l, int start, int n) {
        if(l.size()>1 && n == 1){
            res.add(new ArrayList<>(l));
            return ;
        }
        for(int i = start; i <= n; i++){
            if(n % i == 0){
                l.add(i);
                help(l,i,n/i);
                l.remove(l.size()-1);
            }
        }
        
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容