【发布时间】:2016-04-18 14:20:25
【问题描述】:
硬币兑换是一个流行的面试问题。从本质上讲,这个问题的意思是给定一组硬币面额和总数,如果每种面额硬币的供应量都是无限的,那么有多少种方法可以获得总数。
这是我的代码。 逻辑是每次我挑选硬币时,问题都会减少到解决总减去硬币的问题。
public static int numberOfWays(int total, int[] options){
int[][] memo = new int[options.length][total+1];
for (int i = 0; i <memo.length ; i++) {
for (int j = 0; j <memo[i].length ; j++) {
if(i == 0) memo[i][j] = 1;
else if(options[i] > j ) memo[i][j] = memo[i-1][j];
else memo[i][j] = memo[i-1][j] + memo[i][j - options[i]];
}
}
return memo[options.length-1][total];
}
这适用于total = 5 and options = 1, 2, 3 的测试用例
但是失败了total = 10 and options = 2, 5, 3, 6
谁能帮我理解我做错了什么。
【问题讨论】:
-
每次运行的结果是什么?还有,顺序重要不重要,1+2+2=5和2+2+1一样吗?
-
@GershonPapi 顺序无关紧要。