https://leetcode.com/problems/factor-combinations/description/
首先我们想,我们就从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);
}
}
}