报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
1. 1 2. 11 3. 21 4. 1211 5. 1112211 被读作 “one 1” (“一个一”) , 即 11。 11 被读作 “two 1s” (“两个一”), 即 21。 21 被读作 “one 2”, “one 1” (“一个二” , “一个一”) , 即 1211。
给定一个正整数 n(1 ≤ n ≤ 30),输出报数序列的第 n 项。
注意:整数顺序将表示为一个字符串。 示例 1:
输入: 1 输出: "1"示例2:
输入: 4 输出: "1211"本题主要考察字符串的处理,思路是维护一个需要统计的字符串ans 然后对字符串ans中的数字进行统计,将统计完成的字符串保存到一个临时的字符串s中,之后用s来更新ans 进入下一次迭代 完整的代码如下:
class Solution: def countAndSay(self, n: int) -> str: i = 0 ans = "1" while 1: i += 1 length = len(ans) s = "" # 这里是辅助字符串s ,用来对字符串ans进行更新 count = 1 # ans 中的字符串出现个数计数器 for j in range(length): if j + 1 < length and ans[j] == ans[j + 1]: # 统计ans 中每个字符出现的个数并将结果保存下来 count += 1 continue s = s + str(count) + ans[j] # 将 ans中的字符以及它出现的次数一次保存到临时字符串s 中 count = 1 # 重置count 的值用来统计下一次ans 中的字符串的值 if i == n: break ans = s # 使用 s这个临时字符串来更新要统计的字符串ans return ans # 以上是代码部分 def main(): import sys import io def readlines(): for line in io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8'): yield line.strip('\n') lines = readlines() while True: try: line = next(lines) n = int(line); ret = Solution().countAndSay(n) out = (ret); print(out) except StopIteration: break if __name__ == '__main__': main()