Leetcode038 count-and-say

报数

题目描述:

报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:

1.     1
2.     11
3.     21
4.     1211
5.     111221

1 被读作 "one 1" ("一个一") , 即 11
11 被读作 "two 1s" ("两个一"), 即 21
21 被读作 "one 2", "one 1""一个二" , "一个一") , 即 1211

给定一个正整数 n(1 ≤ n ≤ 30),输出报数序列的第 n 项。

注意:整数顺序将表示为一个字符串。

示例1

输入: 1
输出: "1"

示例2

输入: 4
输出: "1211"

解题思路:

  • 因为第一位永远是1,所以可以先建立只有一个"1"的数组res,然后创建几个参数,num表示循环到当前的数字数组,temp表示num数字数组中的某一位数字,count表示当前temp数字所出现的次数
  • 接下来就比较简单,如果num数字数组中的数字同temp相同,count就增加一,如果不同,就向后移动一位,继续比较,然后在添加的时候,先添加count的值,表示该数字出现了几次,然后添加temp表示该数字

Python源码:

class Solution:
    def countAndSay(self, n: int) -> str:
        res = ["1"]
        for i in range(n):
            num = res[i]
            temp = num[0]  # 当前的数值
            count = 0
            ans = ""
            for j in range(0, len(num)):
                if num[j] == temp:
                    count += 1
                else:
                    ans += str(count)
                    ans += str(temp)
                    temp = num[j]
                    count = 1
            ans += str(count)
            ans += str(temp)
            res.append(ans)
        return res[n - 1]

欢迎关注我的github:https://github.com/UESTCYangHR

猜你喜欢

转载自blog.csdn.net/dzkdyhr1208/article/details/89328818