开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第8天,点击查看活动详情
计算力扣银行的钱
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
解题思路:
计算存款总额可以分为两部分,前半部分按整周计算,后半部分不足一周按天计算,两部分都是等差数列,分别求和后再相加即可 先计算周数 w = n / 7 >> 0w=n/7>>0 和不足一周的天数 d = n % 7d=n%7 前半部分按周计算,其数列为:28 + (28 + 7) + ... + (28 + (w-1)*7)28+(28+7)+...+(28+(w−1)∗7) ,共 ww 项,和为 28 * w + 7 * w * (w - 1) / 228∗w+7∗w∗(w−1)/2 后半部分按天计算,其数列为:(1 + w) + (2 + w) + ... + (d + w)(1+w)+(2+w)+...+(d+w) ,共 dd 项,和为d * w + d * (d + 1) / 2d∗w+d∗(d+1)/2
我的答案:
var totalMoney = function (n) {
const w = n / 7 >> 0, d = n % 7;
return 28 * w + 7 * w * (w - 1) / 2 + d * w + d * (d + 1) / 2;
};
最后
如果有更好的解法或者思路, 欢迎在评论区和我交流~ ღ( ´・ᴗ・` )