List> factorCombination(int n) { List> result = new ArrayList>(); dfs(n, 2, result, new ArrayList()); return result; } void dfs(int n, int start, List> result, List sub ) { if(n == 1) { result.add(new ArrayList(sub)); return; }
for(int i = start; i <= n; i++) { if(n % i != 0) continue; if(i == n && sub.isEmpty()) continue; sub.add(i); dfs(n / i, i, result, sub); sub.remove(sub.size() - 1); } } 求指点,这样的代码能过么?
【在 d********w 的大作中提到】 : 这第一题是我出的,不好意思,让你费心
l*g
15 楼
L家最近貌似格外爱出第一题了?
r*e
16 楼
方法不错啊。
sub
【在 c********6 的大作中提到】 : List> factorCombination(int n) { : List> result = new ArrayList>(); : dfs(n, 2, result, new ArrayList()); : return result; : } : void dfs(int n, int start, List> result, List sub : ) { : if(n == 1) { : result.add(new ArrayList(sub)); : return;
r*e
17 楼
我改了一下,这要不过不了也没办法了,不用recursion实在麻烦。 public List> getFactorCombination(int n) { List> result = new ArrayList<>(); getFactorCombinationHelper(n, n/2, result, new ArrayList()); return result; } private void getFactorCombinationHelper(int n, int start, List > result, List sub) { if(n==1) { result.add(new ArrayList(sub)); return; }
for(int i = start; i >= 2; i--) { if(n % i != 0) continue; sub.add(i); getFactorCombinationHelper(n / i, i, result, sub); sub.remove(sub.size() - 1); } }
sub
【在 c********6 的大作中提到】 : List> factorCombination(int n) { : List> result = new ArrayList>(); : dfs(n, 2, result, new ArrayList()); : return result; : } : void dfs(int n, int start, List> result, List sub : ) { : if(n == 1) { : result.add(new ArrayList(sub)); : return;
List> factorCombination(int n) { List> result = new ArrayList>(); dfs(n, 2, result, new ArrayList()); return result; } void dfs(int n, int start, List> result, List sub ) { if(n == 1) { result.add(new ArrayList(sub)); return; }
for(int i = start; i <= n; i++) { if(n % i != 0) continue; if(i == n && sub.isEmpty()) continue; sub.add(i); dfs(n / i, i, result, sub); sub.remove(sub.size() - 1); } } 求指点,这样的代码能过么?
【在 d********w 的大作中提到】 : 这第一题是我出的,不好意思,让你费心
l*g
30 楼
L家最近貌似格外爱出第一题了?
r*e
31 楼
方法不错啊。
sub
【在 c********6 的大作中提到】 : List> factorCombination(int n) { : List> result = new ArrayList>(); : dfs(n, 2, result, new ArrayList()); : return result; : } : void dfs(int n, int start, List> result, List sub : ) { : if(n == 1) { : result.add(new ArrayList(sub)); : return;
r*e
32 楼
我改了一下,这要不过不了也没办法了,不用recursion实在麻烦。 public List> getFactorCombination(int n) { List> result = new ArrayList<>(); getFactorCombinationHelper(n, n/2, result, new ArrayList()); return result; } private void getFactorCombinationHelper(int n, int start, List > result, List sub) { if(n==1) { result.add(new ArrayList(sub)); return; }
for(int i = start; i >= 2; i--) { if(n % i != 0) continue; sub.add(i); getFactorCombinationHelper(n / i, i, result, sub); sub.remove(sub.size() - 1); } }
sub
【在 c********6 的大作中提到】 : List> factorCombination(int n) { : List> result = new ArrayList>(); : dfs(n, 2, result, new ArrayList()); : return result; : } : void dfs(int n, int start, List> result, List sub : ) { : if(n == 1) { : result.add(new ArrayList(sub)); : return;
r*j
33 楼
这种解法的复杂度如何计算呢?
)); Integer>
【在 r*******e 的大作中提到】 : 我改了一下,这要不过不了也没办法了,不用recursion实在麻烦。 : public List> getFactorCombination(int n) { : List> result = new ArrayList<>(); : getFactorCombinationHelper(n, n/2, result, new ArrayList()); : return result; : } : private void getFactorCombinationHelper(int n, int start, List : > result, List sub) { : if(n==1) { : result.add(new ArrayList(sub));
recursive基本上就是这样了,不过既factorization是降序,这句话可以optimize一下 getFactorCombinationHelper(n / i, i, result, sub); --》 getFactorCombinationHelper(n / i, min(n/i, i), result, sub);
)); Integer>
【在 r*******e 的大作中提到】 : 我改了一下,这要不过不了也没办法了,不用recursion实在麻烦。 : public List> getFactorCombination(int n) { : List> result = new ArrayList<>(); : getFactorCombinationHelper(n, n/2, result, new ArrayList()); : return result; : } : private void getFactorCombinationHelper(int n, int start, List : > result, List sub) { : if(n==1) { : result.add(new ArrayList(sub));
【在 g********r 的大作中提到】 : recursive基本上就是这样了,不过既factorization是降序,这句话可以optimize一下 : getFactorCombinationHelper(n / i, i, result, sub); : --》 : getFactorCombinationHelper(n / i, min(n/i, i), result, sub); : : )); : Integer>
h*s
41 楼
比较经典,和小李的Combination Sum是一类题,也可以变化出乘数不能重复的。
)); Integer>
【在 r*******e 的大作中提到】 : 我改了一下,这要不过不了也没办法了,不用recursion实在麻烦。 : public List> getFactorCombination(int n) { : List> result = new ArrayList<>(); : getFactorCombinationHelper(n, n/2, result, new ArrayList()); : return result; : } : private void getFactorCombinationHelper(int n, int start, List : > result, List sub) { : if(n==1) { : result.add(new ArrayList(sub));
w*s
42 楼
import java.util.ArrayList; import java.util.List; public class FactorTest { List> getFactor(int n) { List> result = new ArrayList<>(); List path = new ArrayList<>(); dfs(n, n / 2, path, result); return result; }
private void dfs(int n, int start, List path, List>> result) { if (n == 1) { result.add(new ArrayList(path)); return; }
for (int i = start; i > 1; i--) { if (n % i != 0) { continue; }
path.add(i); dfs(n / i, Math.min(n / i, i), path, result); path.remove(path.size() - 1); } } }