
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 在力扣银行总共存了多少块钱。
发表评论
最新留言
表示我来过!
[***.240.166.169]2025年04月06日 09时02分25秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
dojo的发展历史
2019-03-06
Python存储系统(Redis)
2019-03-06
C语言指针收藏
2019-03-06
.net 4种单例模式
2019-03-06
T4 生成数据库实体类
2019-03-06
C#搞个跨平台的桌面NES游戏模拟器
2019-03-06
手把手教你安装Eclipse最新版本的详细教程 (非常详细,非常实用)
2019-03-06
《带你装B,带你飞》pytest成魔之路4 - fixture 之大解剖
2019-03-06
互联网App应用程序测试流程及测试总结
2019-03-06
根据轨迹分析出用户家在哪
2019-03-06
PostgreSQL查询表名称及表结构
2019-03-06
linux中使用awk命令
2019-03-06
LAB2 内核的内存管理
2019-03-06
如何使用google搜索?
2019-03-06
Redis分布式锁的正确实现方式
2019-03-06
设计模式-抽象工厂模式
2019-03-06
MySQL Explain查看执行计划详解
2019-03-06
IntelliJ IDEA 中,项目文件右键菜单没有svn选项解决办法
2019-03-06
Spring 动态绑定多实现类实例综述
2019-03-06
IDEA 调试Java代码的两个技巧
2019-03-06