1716. 计算力扣银行的钱
1716. 计算力扣银行的钱
题目
Hercy wants to save money for his first car. He puts money in the Leetcode bank every day.
He starts by putting in $1
on Monday, the first day. Every day from Tuesday to Sunday, he will put in $1
more than the day before. On every subsequent Monday, he will put in $1
more than the previous Monday.
Given n
, return the total amount of money he will have in the Leetcode bank at the end of thenth
day.
Example 1:
Input: n = 4
Output: 10
Explanation: After the 4th day, the total is 1 + 2 + 3 + 4 = 10.
Example 2:
Input: n = 10
Output: 37
Explanation: After the 10th day, the total is (1 + 2 + 3 + 4 + 5 + 6 + 7) + (2 + 3 + 4) = 37. Notice that on the 2nd Monday, Hercy only puts in $2.
Example 3:
Input: n = 20
Output: 96
Explanation: After the 20th day, the total is (1 + 2 + 3 + 4 + 5 + 6 + 7) + (2 + 3 + 4 + 5 + 6 + 7 + 8) + (3 + 4 + 5 + 6 + 7 + 8) = 96.
Constraints:
1 <= n <= 1000
题目大意
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
解题思路
通过公式直接计算,可以将 n
天分为完整的周数和剩余天数分别计算。
完整周数:
- 完整的
weeks
周内,每周固定的 1 到 7 的存款总和为:28 * weeks
(首项为28
)。 - 每周递增 1 元 的部分:
(7 * (weeks - 1) * weeks) / 2
- 累计存款公式为:
28 * weeks + 7 * (weeks - 1) * weeks / 2
。
- 完整的
剩余天数:
- 对于
rest
天,起始存款金额为weeks + 1
,每天递增1
。 - 累计存款公式为:
weeks * rest + (rest + 1) * rest / 2
。
- 对于
复杂度分析
- 时间复杂度:
O(1)
,所有计算均为常数时间操作。 - 空间复杂度:
O(1)
,无需额外空间。
代码
/**
* @param {number} n
* @return {number}
*/
var totalMoney = function (n) {
const weeks = Math.floor(n / 7); // 完整周数
const rest = n % 7; // 剩余天数
// 计算总存款
return (
28 * weeks + // 每周固定的 1 到 7 的存款总和
(7 * (weeks - 1) * weeks) / 2 + // 每周递增的部分
((rest + 1) * rest) / 2 + // 剩余天数的基础部分
weeks * rest // 剩余天数递增的部分
);
};
相关题目
题号 | 标题 | 题解 | 标签 | 难度 | 力扣 |
---|---|---|---|---|---|
2591 | 将钱分给最多的儿童 | 贪心 数学 | 🟢 | 🀄️ 🔗 |