zoukankan      html  css  js  c++  java
  • 边工作边刷题: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
    
    
  • 相关阅读:
    学习进度笔记14
    学习进度笔记13
    学习进度笔记12
    学习进度笔记11
    学习进度笔记10
    学习进度笔记9
    学习进度笔记8
    学习进度笔记7
    学习进度笔记6
    微信客户端兼容性
  • 原文地址:https://www.cnblogs.com/absolute/p/5690312.html
Copyright © 2011-2022 走看看