coin java,322. Coin Change | Java最短代码实现

【思路】

本题考查动态规划。也许一开始很容易想到用贪心算法,但是贪心算法在某些情况下是不成立的,比如coins = [1, 3, 5, 6],要amount = 11,用贪心法返回3,实际上最少的是2(3 + 5)。因而改用动态规划,用dp存储硬币数量,dp[i] 表示凑齐钱数 i 需要的最少硬币数,那么凑齐钱数 amount 最少硬币数为:固定钱数为 coins[j] 一枚硬币,另外的钱数为 amount - coins[j] 它的数量为dp[amount - cois[j]],j 从0遍历到coins.length - 1:

public int coinChange(int[] coins, int amount) {

int[] dp = new int[amount + 1];

for (int i = 1; i <= amount; i++) {

dp[i] = 0x7fffffff;

for (int j = 0; j < coins.length; j++)

if (i >= coins[j] && dp[i - coins[j]] != 0x7fffffff)

dp[i] = Math.min(dp[i], dp[i - coins[j]] + 1);

}

return dp[amount] == 0x7fffffff ? -1 : dp[amount];

}

180 / 180

test cases passed. Runtime:24 ms  Your runtime beats 78.00% of javasubmissions.

欢迎优化!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值