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

一个有效的累加序列必须至少包含 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
最后修改日期: 2021年9月10日

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。