leetcode 306. 累加数

累加数是一个字符串,组成它的数字可以形成累加序列。

一个有效的累加序列必须至少包含 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution(object):
def isAdditiveNumber(self, num):
"""
:type num: str
:rtype: bool
"""
def dfs(numstr,res):
if len(res) >= 3 and res[-2] + res[-3] != res[-1]:return False
if not numstr and len(res) >= 3:return True
for i in range(len(numstr)):
curr = numstr[:i+1]
if curr[0] == '0' and len(curr) != 1:continue
if dfs(numstr[i+1:],res+[int(curr)]):return True
return False
return dfs(num,[])