刷题83——硬币

122.硬币

题目链接

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/coin-lcci

题目描述

硬币。给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码计算n分有几种表示法。(结果可能会很大,你需要将结果模上1000000007)

示例1:

输入: n = 5
输出:2
解释: 有两种方式可以凑成总金额:
5=5
5=1+1+1+1+1
示例2:

输入: n = 10
输出:4
解释: 有四种方式可以凑成总金额:
10=10
10=5+5
10=5+1+1+1+1+1
10=1+1+1+1+1+1+1+1+1+1
说明:

注意:

你可以假设:

0 <= n (总金额) <= 1000000

关键技术

动态规划

题目分析

  1. 新建数组dp,dp[j]表示组成j元需要最少的硬币数;
  2. 状态转移方程:dp[j] = dp[j] + dp[j-coin[i]];
  3. 注意:对1000000007取模。
/**
 * @param {number} n
 * @return {number}
 */
var waysToChange = function(n) {
    let coin = [1, 5, 10, 25];
    let dp = new Array(n+1).fill(1);
    for(let i=1; i<4; i++){
        for(let j=1; j<=n; j++){
           if(j - coin[i] >= 0){
                dp[j] = (dp[j] + dp[j-coin[i]]) % 1000000007;
           }
        }
    }
    return dp[n];
};

  

posted @ 2020-04-23 01:18  刘欣lx  阅读(204)  评论(0编辑  收藏  举报