1716. 计算力扣银行的钱 - 力扣(LeetCode)

需求是:

Hercy 每天往银行存钱:

  • 第一个周一存 1 块,周二存 2 块,……,周日存 7 块。

  • 第二个周一开始,每天都比上周同一天多存 1 块,也就是:2, 3, 4, 5, 6, 7, 8。

  • 以此类推……


正确思路:

按天来模拟会更直观,不容易出错:

  1. 用两个变量:

    • 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

更多推荐