累加数是一个字符串,组成它的数字可以形成累加序列。
一个有效的累加序列必须至少包含 3 个数。除了最开始的两个数以外,字符串中的其他数都等于它之前两个数相加的和。
给定一个只包含数字'0'-'9'
的字符串,编写一个算法来判断给定输入是否是累加数。
说明: 累加序列里的数不会以 0 开头,所以不会出现 1, 2, 03 或者 1, 02, 3 的情况。
示例 1:
输入: "112358"
输出: true
解释: 累加序列为: 1, 1, 2, 3, 5, 8 。1 + 1 = 2, 1 + 2 = 3, 2 + 3 = 5, 3 + 5 = 8
示例 2:
输入: "199100199"
输出: true
解释: 累加序列为: 1, 99, 100, 199。1 + 99 = 100, 99 + 100 = 199
进阶:
你如何处理一个溢出的过大的整数输入?
1.回溯
Python解答:
class Solution:
def isAdditiveNumber(self, num: str) -> bool:
def backtrace(num, i, pre, total):
if i == len(num):
return True
else:
flag = False
for k in range(len(total), len(num)-i+1):
if k > 1 and num[i] == '0':
continue
elif int(pre)+int(total) == int(num[i:i+k]):
flag = flag or backtrace(num, i+k, total, num[i:i+k])
if flag:
return True
return flag
is_true = False
if len(num) < 3:
return False
for i in range(1, len(num)//2+1):
for j in range(1, len(num)-i):
if (i > 1 and num[0] == '0') or (j > 1 and num[i] == '0'):
continue
is_true = is_true or backtrace(num, i+j, num[:i],num[i:i+j] )
return is_true
留言