这题想了很久,采用动态规划这个基本格调是肯定的
1. new 一个 dp[] ,length 分别+1
2. 横向/竖向 值为0的先进行初始化
3.双重for循环,填充每个dp的值.
case 1: 待兑换的钱==零钱的面额 dp[i+1][j]=1
case 2: 待兑换的钱<零钱的面额
dp[i+1][j]=dp[i][j] 采用上一行的兑换的最小值
case 3: 待兑换的钱 > 零钱的面额
l 理论值 :dp[i+1][j]=1+dp[i+1][余数]
case 4: 余数==0,则 dp[i+1][j]=1
case 5: 余数!=0 继续判断
case 6: dp[i+1][余数]==0,说明兑换不成功 则 dp[i+1][j]=dp[i][j]
case 7: dp[i+1][余数]!=0.说明能兑换成功,则 dp[i+1][j]=Math.min(1+dp[i+1][余数], dp[i][j] )
最后返回 dp[arr.length][length];