'''
采用了一种比较麻烦的方法:
先通过双重循环找到第一个数字和第二个数字,然后循环计算后边的value。
'''
class Solution:
def isAdditiveNumber(self, num: str) -> bool:
nums = [n for n in num]
self.res = False
# 第一个数肯定在字符串的前1/2,通过记录数字的位置,来计算数字和
# 最重要的是确定第一个数和第二个数
pre = 0
post = 0
for i in range(1, len(nums)//2+1):
pre = nums[:i]
if pre[0] == "0" and len(pre) > 1:
continue
pre = eval(''.join(pre))
for j in range(i, len(nums)-1):
post = nums[i:j+1]
if post[0] == "0" and len(post) > 1:
continue
post = eval(''.join(post))
res = pre + post
rel_len = len(str(res))
# print(''.join(nums[j+1:j+rel_len+1]))
if j+rel_len+1 > len(nums):
continue
rel = nums[j+1:j+rel_len+1]
if rel[0] == "0" and len(rel) > 1:
continue
rel = eval(''.join(rel))
if res == rel:
self.drawback(nums[j+1:], pre, post)
return self.res
def drawback(self, nums, pre, post):
if len(nums) == 0:
self.res = True
return
res = pre + post
rel_len = len(str(res))
rel = nums[:rel_len]
# print(rel)
if rel[0] == "0" and len(rel) > 1:
return
rel = eval(''.join(rel))
if res == rel:
self.drawback(nums[rel_len:], post, res)
力扣 306累加树
最新推荐文章于 2023-05-05 11:48:40 发布