算法笔记|Day33动态规划VI
☆☆☆☆☆leetcode 322. 零钱兑换
题目链接:leetcode 322. 零钱兑换
题目分析
1.dp数组含义:dp[j]表示凑足总额为j所需钱币的最少个数;
2.递推公式:dp[j]=Math.min(dp[j],dp[j-coins[i]]+1)(分别考虑取第i个钱币与不取第i个钱币得到的钱币个数取最小值);
3.初始化:dp[0]=0,其余dp[]=Integer.MAX_VALUE(凑足总额为j所需钱币的最少个数为0,为了不影响后续计算应赋其他值为最大值Integer.MAX_VALUE);
4.遍历顺序:顺序不影响结果(考虑排列或组合均可),先遍历货币或者背包都可以,背包一定是要正序遍历。
代码
class Solution {
public int coinChange(int[] coins, int amount) {
int dp[]=new int[amount+1];
for(int i=1;i<dp.length;i++)
dp[i]=Integer.MAX_VALUE;
for(int i=0;i<coins.length;i++){
for(int j