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
おすすめ
ランキング