首页 > 其他 > 详细

面试题 08.11. 硬币

时间:2021-04-22 23:46:05      阅读:37      评论:0      收藏:0      [点我收藏+]

1.状态定义

dp[i]表示组成面额 i,有多少种方案。

2.状态转移方程

int[] coins = new int[]{1,5,10,25};

for(int coin: coins) {

     dp[k] += dp[k - coin];

}

比如dp[36] = dp[36-1] + dp[36 - 5] + dp[36-10] + dp[36-25]

3.边界处理

dp[0] = 1.

 

先遍历硬币,避免coin(6) = 1 + 5 和coin(6) = 5 + 1 情况。

面试题 08.11. 硬币

class Solution {
    public int waysToChange(int n) {
        int[] dp = new int[n + 1];
        int[] coins = new int[]{1,5,10,25};
        dp[0] = 1;
        for(int coin : coins)
            for(int i = coin; i <= n; i++)
                dp[i] = (dp[i] + dp[i - coin]) % 1000000007;
        return dp[n];
    }
}

 

面试题 08.11. 硬币

原文:https://www.cnblogs.com/deerlet/p/14691201.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!