【リートコード】累積数+バックトラッキング方式

ここに画像の説明を挿入

class Solution:
    def isAdditiveNumber(self, num: str) -> bool:
        if len(num) < 3: #长度小于3
            return False

        def helper(num1,num2,rest):#num1 num2为前两个数,rest为除去这两个数剩下的字符
            result = str(eval(num1) + eval(num2))#得到前两个数字相加的字符结果
            if result == rest: #如果该结果与剩下的字符串相等,则结束,返回True
                return True
            elif len(result) > len(rest) or rest[:len(result)] != result:#如果得到的字符串长度超出,或者与剩余的字符串不相等
                return False
            else:
                return helper(num2,result,rest[len(result):]) #将num2与结果result作为前两个

        def judge(num): #判断函数
            if num[0] == "0" and len(num) > 1: #长度超过1且首字符为“0”
                return True
            else:
                return False

        for i in range(1, len(num) + 1):  # 找到第一个数:num[:i]
            for j in range(i + 1, len(num)):  # 找到第二个数:num[i:j]
                num1, num2, rest = num[:i], num[i:j], num[j:]
                if judge(num1) or judge(num2): #判断一下,如果长度超过1且首字为“0”就进入下一个配对
                    continue
                if helper(num1,num2,rest):#进行回溯算法
                    return True
        return False
        

おすすめ

転載: blog.csdn.net/Sgmple/article/details/111198719
おすすめ