f[i,j] = f[i-1,j]+f[i-1,j-c]+f[i-1,j-2c]+f[i-1,j-3c]+f[i-1,j-4c]…
f[i-1,j-c] = f[i-1,j-c]+f[i-1,j-2c]+f[i-1,j-3c]+f[i-1,j-4c]…
f[i,j] = f[i - i , j ] + f[i-1 , j -c ]
j-c 的意义是除掉k个自己,所对应的值有多少种解法
先一个一个数字进行思考 通过循环来实现一个一个的数字进行考虑
第一个有几种
第二个有几种(需要减去第一个 当然减去的前提是能凑amount)
依次类推 每一个位置所对应的值都是能达到的该数的种数
虽然求的是amount 但是0~amount之间的数据值/位置都是有意义的 也就是 j++ 而不是 j+=coins[i]
public int change(int m, int[] coins) {
int len = coins.length;
int f[] = new int [m+1];
f[0] = 1;
for(int i = 0 ; i < len;i++) {
for(int j = coins[i] ; j <= m ; j++) {
f[j] += f[j-coins[i]]; //连选多个的情况也有了
}
}
return f[m];
}