学习来自 网上各位大神,if侵 return删 else pass

题目:

报数 - 38

 

 

解答一: 使用 itertools 方式  "".join()

报数 - 38

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 循环,只看上一行字符,遇到不同则拼接字符串

报数 - 38

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

 

解答三: 正则大神的方法,我得想一想,感觉很牛逼,但是速度不行

报数 - 38

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

 

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-07-01
  • 2022-01-04
  • 2022-12-23
  • 2022-02-19
  • 2021-10-13
  • 2021-08-26
猜你喜欢
  • 2021-09-16
  • 2021-09-11
  • 2021-04-05
  • 2022-01-03
  • 2021-07-27
  • 2022-12-23
相关资源
相似解决方案