边工作边刷题:70天一遍leetcode: day 50

Additive Number

要点:实现题,三层loop:方式是外层确定前2个数的边界i,第二层确定第一个数的边界j。

  • 确定了前两个数后就loop是否为正确序列:这里最好另用个函数,why?
    • 逻辑上False退出循环后要进入下一次,但是True的情况也是从内层循环结束,但不进入下一层。如果用函数,可以直接返回True/False,不用在循环结束通过其他条件判断True/False情况
    • 结构上说外面的2层循环是初始化,而第三层是判断,所以应该用函数分开
  • ‘0’开始的判断的条件:长度>1并且第一个为’0'
  • 省时的要点就是早退出:比如第1+2个数最多到2/3长度

错误点:

  • i从2开始,j从1开始,全表示数的下一个位置。
class Solution(object):
    def isAdditiveNumber(self, num):
        """
        :type num: str
        :rtype: bool
        """
        def helper(num, n1, n2):
            #print num, n1, n2
            k = 0
            while k<len(num):
                res = int(n1)+int(n2)
                n3 = str(res)
                if n3 != num[k:k+len(n3)]:
                    return False
                k+=len(n3)
                n1 = n2
                n2 = n3 # error 3: should be int()
            return True
            
        for i in range(2,len(num)//3*2+1): # not an error2: i is +1 more than right index
            for j in range(1, i):
                num1 = num[:j]
                num2 = num[j:i]
                if len(num1)>1 and num[0]=='0': continue
                if len(num2)>1 and num[j]=='0': continue
                # error 1: j is +1 more than right index
                if helper(num[i:], num1, num2):
                    return True
        return False

posted @   absolute100  阅读(89)  评论(0编辑  收藏  举报
编辑推荐:
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
阅读排行:
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单
· C# 13 中的新增功能实操
· Supergateway:MCP服务器的远程调试与集成工具
· Vue3封装支持Base64导出的电子签名组件
点击右上角即可分享
微信分享提示