1716 计算力扣银行的钱(模拟)
发布日期:2021-05-07 21:57:16 浏览次数:23 分类:精选文章

本文共 882 字,大约阅读时间需要 2 分钟。

Hercy 想要为购买第一辆车存钱,他每天都往力扣银行里存钱。最开始,他在周一的时候存入 1 块钱。从周二到周日,他每天都比前一天多存入 1 块钱。在接下来每一个周一,他都会比前一个周一多存入 1 块钱。给你 n,返回在第 n 天结束的时候他在力扣银行总共存了多少块钱。

思路分析

  • 问题分析

    • Hercy 每天存钱的金额形成一个递增的等差数列。
    • 每周的存钱金额遵循特定的模式,周一的存钱金额每周递增 1 块钱。
  • 关键观察

    • 每个完整的星期存钱总额为 28 块钱(1 到 7 的和)。
    • 每个完整的星期之后,周一的存钱金额增加 1 块钱。
    • 剩余的天数需要单独计算其存钱总额。
  • 算法选择

    • 计算完整的星期数和剩余天数。
    • 使用等差数列求和公式计算总和。
  • 复杂度分析

    • 时间复杂度:O(1),因为所有计算都是常数时间操作。
    • 空间复杂度:O(1),只使用了一些变量。
  • 解决代码

    class Solution:    def totalMoney(self, n: int) -> int:        if n <= 7:            return (n * (n + 1)) // 2        period = n // 7        last = n % 7        sum = 28 * period        sum += (period * (period - 1) // 2) * 7        sum += ((2 * period + 1 + last) * last) // 2        return sum

    代码解释

  • 初始检查

    • 如果 n 小于等于 7,直接返回 1 到 n 的和。
  • 计算完整星期数和剩余天数

    • period 表示完整的星期数。
    • last 表示剩余天数。
  • 计算总和

    • sum 初始化为完整星期的总和(28 * period)。
    • sum 加上每个完整星期后增加的金额。
    • sum 最后加上剩余天数的存钱总额。
  • 通过这种方法,我们可以快速计算出在第 n 天结束时,Hercy 在力扣银行总共存了多少块钱。

    上一篇:515 在每个树行中找最大值(dfs)
    下一篇:1754 构造字典序最大的合并字符串(贪心)

    发表评论

    最新留言

    表示我来过!
    [***.240.166.169]2025年04月06日 09时02分25秒