You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求解LeetCode银行存钱问题时Python代码出错,请求排查

LeetCode存钱问题调试与修正

题目描述

Hercy想要为他的第一辆车存钱,他每天都往LeetCode银行里存钱。
第一天是周一,他存入1美元。从周二到周日,每天存入的钱比前一天多1美元。每个后续的周一,存入的钱比前一个周一多1美元。
给定n,返回第n天结束时他在LeetCode银行的总存款额。
示例1:
输入:n = 4
输出:10
解释:第4天结束后,总存款为1 + 2 + 3 + 4 = 10。

问题现象

输入n=4时,代码输出为6,调试发现i=4未被计入总金额。

原代码

class Solution(object):
    def totalMoney(self, n):
        amount = 0
        i=1

        while i < n:
            amount +=i

            i+=1
        return amount

if __name__ == '__main__':
    n=4
    print(Solution().totalMoney(n))

问题分析

  1. 循环条件错误:当前循环条件是while i < n,当i等于n时会直接跳出循环,导致最后一天的存款没被累加。比如n=4时,i=4不满足i<4,所以不会执行amount +=i,总金额少加了4,结果变成1+2+3=6。

  2. 逻辑不符合题目规则:原代码只是简单累加1到n,但题目实际是每周一的存款比上周一多1,比如第8天(第二周周一)存2美元,第9天存3美元,以此类推。原代码只适用于n≤7的情况,超过7天后结果会完全错误。

修正方案

第一步:修复循环条件

把循环条件改为while i <= n,确保最后一天的金额被计入:

class Solution(object):
    def totalMoney(self, n):
        amount = 0
        i=1

        while i <= n:
            amount +=i

            i+=1
        return amount

if __name__ == '__main__':
    n=4
    print(Solution().totalMoney(n))

此时输入n=4会输出正确的10,但这只是解决了示例的问题,还需要实现题目真正的存钱逻辑。

第二步:实现正确的存钱逻辑

根据题目规则,我们可以计算完整的周数和剩余天数:

  • 完整周数:weeks = n // 7
  • 剩余天数:days = n % 7
  • 每一周的总金额是等差数列,第一周总和28,每周比前一周多7
  • 剩余天数的存款从weeks+1开始,连续加days天

修正后的完整代码:

class Solution(object):
    def totalMoney(self, n):
        weeks = n // 7
        days = n % 7
        # 计算完整周的总和:首项28,公差7的等差数列求和
        total_weeks = weeks * 28 + 7 * weeks * (weeks - 1) // 2
        # 计算剩余天数的总和:首项weeks+1的连续days项求和
        total_days = days * (weeks + 1) + days * (days - 1) // 2
        return total_weeks + total_days

if __name__ == '__main__':
    n=4
    print(Solution().totalMoney(n)) # 输出10
    n=8
    print(Solution().totalMoney(n)) # 输出28

内容的提问来源于stack exchange,提问作者vilnius19

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 12:37:28