LeetCode 322.零钱兑换
确定状态:
设f[n]为当金额为n时的硬币数。
最后一步:遍历所有硬币面值,存在一枚面值i的硬币使得f[n-i]最小
转移方程:
f[i]=min{f[i−coins]+1}f[i]=min\{f[i-coins]+1\}f[i]=min{f[i−coins]+1}
class Solution {
public int coinChange(int[] coins, int amount) {
int n=coins.length;
int []f=new int[amount+1];
f[0]=0;
for(int i=1;i<=amount;i++)
{
f[i]=Integer.MAX_VALUE;
for(int j=0;j<n;j++)
{
if(i>=coins[j])
{
if(f[i-coins[j]]==-1)
continue;
f[i]=Math.min(f[i],f[i-coins[j]]+1);
}
}
if(f[i]==Integer.MAX_VALUE)
f[i]=-1;
}
return f[amount];
}
}
本文详细解析了LeetCode322题零钱兑换的动态规划解法,阐述了如何通过遍历所有硬币面值找到使f[n-i]最小的面值,从而确定最优解。通过具体代码实现展示了动态规划算法的具体应用。
1292

被折叠的 条评论
为什么被折叠?



