本文最后更新于259 天前,其中的信息可能已经过时,如有错误请发送邮件到2446865563@qq.com
1.题目基本信息
1.1.题目描述
累加数 是一个字符串,组成它的数字可以形成累加序列。
一个有效的 累加序列 必须 至少 包含 3 个数。除了最开始的两个数以外,序列中的每个后续数字必须是它之前两个数字之和。
给你一个只包含数字 '0'-'9' 的字符串,编写一个算法来判断给定输入是否是 累加数 。如果是,返回 true ;否则,返回 false 。
说明:累加序列里的数,除数字 0 之外,不会 以 0 开头,所以不会出现 1, 2, 03 或者 1, 02, 3 的情况。
1.2.题目地址
https://leetcode.cn/problems/additive-number/description/
2.解题方法
2.1.解题思路
穷举
3.解题代码
python代码
class Solution:
def isAdditiveNumber(self, num: str) -> bool:
# 思路:穷举
n = len(num)
# [secondStart,secondEnd]闭区间维护第二个数
for secondStart in range(1, n - 1):
if num[0] == "0" and secondStart > 1:
break
for secondEnd in range(secondStart, n):
if num[secondStart] == "0" and secondEnd != secondStart:
break
if self.valid(0, secondStart, secondEnd, num):
return True
return False
def valid(self, firstStart, secondStart, secondEnd, num):
n = len(num)
while secondEnd < n:
# 第一步,计算第三个数的字符串third
third = str(int(num[firstStart:secondStart]) + int(num[secondStart:secondEnd + 1]))
thirdStart = secondEnd + 1
thirdEnd = secondEnd + len(third)
# 第二步,判断third是否和后面紧跟着的字符串匹配;如果第三个数字刚好匹配到num结尾则返回true
if thirdEnd >= n or num[thirdStart:thirdEnd + 1] != third:
break
if thirdEnd == n - 1:
return True
# 第三步,如果匹配且还有剩余的字符串,则更新firstStart,secondStart,secondEnd
firstStart = secondStart
secondStart = thirdStart
secondEnd = thirdEnd
return False
4.执行结果










