题目
判断一个字符串是否属于斐波那契数列:Fibonacci sequence之类的东西。
自己属实看到这个题目,一点没摸着头脑。
代码
总的思路,就是从组合中找到一个开始a+b=c的序列,然后继续判断是否属于这个序列的规律。
class Solution:
def isAdditiveNumber(self, num):
n = len(num)
for i, j in itertools.combinations(range(1, n), 2):
a, b = num[:i], num[i:j]
if a != str(int(a)) or b != str(int(b)):
continue
while j < n:
c = str(int(a) + int(b))
if not num.startswith(c, j):
break
j += len(c)
a, b = b, c
if j == n:
return True
return False
代码二
同样是寻找一个a+b=c的序列,但是这个使用for i 和for j的循环。
class Solution:
def isAdditiveNumber(self, num: 'str') -> 'bool':
for i in range(1, len(num) - 1):
for j in range(i + 1, len(num)):
if i > 1 and num[0] == '0': continue
if j > i + 1 and num[i] == '0': continue
a, b, k = int(num[:i]), int(num[i: j]), j
c = a + b
s = str(c)
while k + len(s) <= len(num) and s == num[k: k + len(s)]:
if k + len(s) == len(num):
return True
a, b, k = b, c, k + len(s)
c = a + b
s = str(c)
return False