python-leetcode-1716. 计算力扣银行的钱
需求是:Hercy 每天往银行存钱:第一个周一存 1 块,周二存 2 块,……,周日存 7 块。第二个周一开始,每天都比上周同一天多存 1 块,也就是:2, 3, 4, 5, 6, 7, 8。以此类推……
·


需求是:
Hercy 每天往银行存钱:
第一个周一存 1 块,周二存 2 块,……,周日存 7 块。
第二个周一开始,每天都比上周同一天多存 1 块,也就是:2, 3, 4, 5, 6, 7, 8。
以此类推……
正确思路:
按天来模拟会更直观,不容易出错:
-
用两个变量:
-
week:当前是第几周(从 0 开始) -
day:当前是第几天(从 1 到 n) -
每天存的钱 =
week + 当前是周几 + 1
-
✅ 正确代码(模拟法):
def totalMoney(n: int) -> int:
total = 0
for day in range(n):
week = day // 7
day_of_week = day % 7
total += week + day_of_week + 1
return total
举个例子:
-
n = 10-
第 1 周:1, 2, 3, 4, 5, 6, 7 → 28
-
第 2 周:2, 3, 4 → 总和 9
-
答案:28 + 9 = 37
-
如果你想用数学优化版:
def totalMoney(n: int) -> int:
full_weeks = n // 7
remaining_days = n % 7
# 每一周都是一个等差数列:第 i 周是 (7 * (2 * i + 6)) // 2
total = 0
for i in range(full_weeks):
total += (7 * (2 * i + 1 + 6)) // 2 # 等差数列求和
# 剩下几天,从下一周开始的基础上累加
start = full_weeks + 1
for i in range(remaining_days):
total += start + i
return total
更多推荐
所有评论(0)