306. 累加数
深度优先 +剪枝, 这道题 没发现什么诀窍,就是对第一个数字和第二个数字为几位数分别遍历,然后判断后续序列是否满足累加条件
class Solution:
def isAdditiveNumber(self, num: str) -> bool:
for fir in range(1,len(num)//2+1):
for sed in range(1,len(num)//2+1):
a = int(num[0:fir])
b = int(num[fir:fir+sed])
if len(str(a)) !=fir or len(str(b)) !=sed :
continue
now = fir+sed
while 1:
b = a+b
a = b-a
if now+len(str(b)) >len(num):
break
if int(num[now:now+len(str(b))]) == b:
now = now+len(str(b))
else :
break
if now == len(num):
return True
return False
824. 山羊拉丁文
首先以空格为间隔取出单词, 然后对于单词首字母进行判定,分别处理元音和辅音的情况
class Solution:
def toGoatLatin(self, sentence: str) -> str:
res =""
a = 'a '
for word in sentence.split(' '):
if word[0] in ['a','e','i','o','u','A','E','I','O','U']:
res +=word
else:
res +=word[1:]
res +=word[0]
res +='ma'
res += a
a ='a'+a
return res[:len(res)-1]