【发布时间】:2017-12-03 16:08:54
【问题描述】:
给定一组非负整数和一个值总和,确定给定集合中是否存在总和等于给定总和的子集。
例如:
set = {1,2,5,7}
sum = 8
=> true
我实际上用这段代码解决了这个问题:
public boolean isSubsetSum(int[] set, int sum) {
Arrays.sort(set);
boolean[][] memo = new boolean[set.length+1][sum+1];
for (int i = 0; i < memo.length; i++) {
memo[i][0] = true;
}
for (int i = 1; i < memo.length; i++) {
for (int j = 1; j < memo[i].length; j++) {
if (set[i-1] > j) {
memo[i][j] = memo[i-1][j];
} else {
memo[i][j] = memo[i-1][j] || memo[i-1][j-set[i-1]];
}
}
}
return memo[memo.length-1][memo[memo.length-1].length-1];
}
但是,现在我想重构构成给定总和的所有可能组合。
是否可以从我的记忆矩阵中做到这一点,还是我必须以不同的方式做到这一点?
【问题讨论】: