📖本篇内容:leetcode每日一题1716. 计算力扣银行的钱 数学问题 等差数列 这不是高中的知识么 + 逻辑推理
📆 最近更新:leetcode每日一题373. 查找和最小的K对数字有序+找最值 优先队列的堆就对了 看不懂来私我 我手把手教你
🙊个人简介:一只二本院校在读的大三程序猿,本着注重基础,打卡算法,分享技术作为个人的经验总结性的博文博主,虽然可能有时会犯懒,但是还是会坚持下去的,如果你很喜欢博文的话,建议看下面一行~(疯狂暗示QwQ)
🌇 点赞 👍 收藏 ⭐留言 📝 一键三连 关爱程序猿,从你我做起
写在前面
Hello,大家好,可爱又迷人的小付又来了哦~今天睡觉睡不着,只好起来卷一题,阿巴不,不是吧啊sir,这是上天也为了能让我早点睡觉么,简单题,那咱们就快点来解决掉它吧!
题目
- 计算力扣银行的钱
Hercy 想要为购买第一辆车存钱。他 每天 都往力扣银行里存钱。
最开始,他在周一的时候存入 1 块钱。从周二到周日,他每天都比前一天多存入 1 块钱。在接下来每一个周一,他都会比 前一个周一 多存入 1 块钱。
给你 n ,请你返回在第 n 天结束的时候他在力扣银行总共存了多少块钱。
示例
示例1:
输入:n = 4
输出:10
解释:第 4 天后,总额为 1 + 2 + 3 + 4 = 10 。
示例2:
输入:n = 10
输出:37
解释:第 10 天后,总额为 (1 + 2 + 3 + 4 + 5 + 6 + 7) + (2 + 3 + 4) = 37 。注意到第二个星期一,Hercy 存入 2 块钱。
示例3:
输入:n = 20
输出:96
解释:第 20 天后,总额为 (1 + 2 + 3 + 4 + 5 + 6 + 7) + (2 + 3 + 4 + 5 + 6 + 7 + 8) + (3 + 4 + 5 + 6 + 7 + 8) = 96 。
提示
1 <= n <= 1000
思路
找规律嘛
如果第一个星期每天都存入成功
那么就会有:
1 + 2 + 3 + 4 + 5 + 6 + 7 = 28
这么多钱钱…
如果第一个和第二个星期也都存入成功
那么就会有:
(第一个星期存的钱) + 2 + 3 + 4 + 5 + 6 + 7 + 8 = 28 + 28 + 7
以此类推因为每个星期的初始金额+1 后续每天也都 +1 共有7天 所以 也就每次比前一个星期多7块钱
代码实现
class Solution {
public int totalMoney(int n) {
//用来计算有多少周
int weekNum = n / 7;
//用来计算在当前这一周的第几天
int dayIndex = n % 7;
int money = 0;
//遍历周数 有多少周 就有多少个 28元 + 每周多7元 本周永远比上一周多七块钱
for (int i = 0; i< weekNum;i++){
money += 28 + i * 7;
}
//遍历一周中的第几天 从第一天到指定的第几天 每天+1 初始值周数为周钱
for (int i = 1;i<= dayIndex;i++){
money += i + weekNum;
}
return money;
}
}
执行结果
代码空间优化
既然上面都推导出来了 那你是不是 能发现规律呢,这不是高中学过的 等差数列么。
代码实现
class Solution {
public int totalMoney(int n) {
int weekNum = n / 7;
int dayIndex = n % 7;
return (28 * weekNum)
+ (7 * weekNum * (weekNum - 1) / 2)
+ (weekNum * dayIndex)
+ (dayIndex * (dayIndex + 1) / 2);
}
}
执行结果
写在最后
2022-1-15 小付坚持打卡哦~
是不是因为明天要打周赛
所以今天力扣特意为我们准备的简单题呢
好啦,睡觉收工
最后
每天进步点 每天收获点
愿诸君 事业有成 学有所获
如果觉得不错 别忘啦一键三连哦~