• 边工作边刷题:70天一遍leetcode: day 31-1


    Additive Number

    要点:基本是道实现题,主要看错误点
    错误点:

    • 最内循环的结构:每次计算和以后都有一个新结果,比较新结果和当前下标下的,这样不断的roll over。这里用了先比较再更新的下标更新方式。最终如果更新后下标超出,说明找到解,如果在比较的时候超出string长度范围,则当前的和是不可行的
    • 注意java string.substring的upper limit是exclusive的
    • k到下一个位置的更新是+=len
    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
    
  • 相关阅读:
    微信OpenID获取
    2015总结及2016目标
    python start
    csv到mysql数据库如何分割
    读书 --- 老码识途
    读书--编写高质量代码 改善C#程序的157个建议2
    读书--编写高质量代码 改善C#程序的157个建议
    BinarySearch
    在aspx中写c#
    AWS 2020 Innovate所有视频
  • 原文地址:https://www.cnblogs.com/absolute/p/5678131.html
Copyright © 2020-2023  润新知