列表

详情


面试题 08.11. 硬币

硬币。给定数量不限的硬币,币值为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

说明:

注意:

你可以假设:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int waysToChange(int n) { } };

python3 解法, 执行用时: 56 ms, 内存消耗: 14.8 MB, 提交时间: 2022-11-30 21:33:49

class Solution:
    def waysToChange(self, n: int) -> int:
        mod = 10**9 + 7

        ans = 0
        for i in range(n // 25 + 1):
            rest = n - i * 25
            a, b = rest // 10, rest % 10 // 5
            ans += (a + 1) * (a + b + 1)
        return ans % mod

golang 解法, 执行用时: 0 ms, 内存消耗: 1.8 MB, 提交时间: 2022-11-30 21:33:09

func waysToChange(n int) int {
    ans := 0
    mod := 1000000007
    for i := 0; i * 25 <= n; i++ {
        rest := n - i * 25
        a, b := rest/10, rest%10/5
        ans = (ans + (a + 1) * (a + b + 1) % mod) % mod
    }
    return ans
}

golang 解法, 执行用时: 12 ms, 内存消耗: 9.5 MB, 提交时间: 2022-11-30 21:32:46

func waysToChange(n int) int {
    dp := make([]int, n + 1)
    dp[0] = 1
    coins := []int{1, 5, 10, 25}
    for i := 0; i < 4; i++ {
        for j := 1; j <= n; j++ {
            if j - coins[i] >= 0 {
                dp[j] += dp[j - coins[i]]
            }
        }
    }
    return dp[n] % 1000000007
}

python3 解法, 执行用时: 640 ms, 内存消耗: 64.5 MB, 提交时间: 2022-11-30 21:32:30

class Solution:
    def waysToChange(self, n: int) -> int:
        mod = 10**9 + 7
        coins = [25, 10, 5, 1]

        f = [1] + [0] * n
        for coin in coins:
            for i in range(coin, n + 1):
                f[i] += f[i - coin]
        return f[n] % mod

上一题