学习来自 网上各位大神,if侵 return删 else pass
题目:
解答一: 使用 itertools 方式 "".join()
import itertools
class Solution:
def countAndSay(self, n: int) -> str:
s = "1"
for _ in range(n-1):
s = "".join( str(len(list(group))) + digit for digit, group in itertools.groupby(s))
return s
解答二: 使用两个while 循环,只看上一行字符,遇到不同则拼接字符串
class Solution:
def countAndSay(self, n):
seq = "1"
for i in range(n - 1):
seq = self.get_next_seq(seq)
return seq
def get_next_seq(self, seq):
i, next_seq = 0, ""
while i < len(seq):
count = 1
while i < len(seq) - 1 and seq[i] == seq[i + 1]:
count += 1
i += 1
next_seq += str(count) + seq[i]
i += 1
return next_seq
解答三: 正则大神的方法,我得想一想,感觉很牛逼,但是速度不行
class Solution:
def countAndSay(self, n):
s = '1'
for _ in range(n - 1):
s = re.sub(r'(.)\1*', lambda m: str(len(m.group(0))) + m.group(1), s)
return s