38. 報數(shù)(Python)-【尚未解決】

更多精彩內(nèi)容,請關(guān)注【力扣簡單題】

題目

難度:★★☆☆☆
類型:數(shù)組

報數(shù)序列是一個整數(shù)序列,按照其中的整數(shù)的順序進行報數(shù),得到下一個數(shù)。其前五項如下:

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

1 被讀作 "one 1" ("一個一") , 即 11。
11 被讀作 "two 1s" ("兩個一"), 即 21。
21 被讀作 "one 2", "one 1" ("一個二" , "一個一") , 即 1211。

給定一個正整數(shù) n(1 ≤ n ≤ 30),輸出報數(shù)序列的第 n 項。

注意:整數(shù)順序?qū)⒈硎緸橐粋€字符串。

示例

示例 1:

輸入: 1
輸出: "1"
示例 2:

輸入: 4
輸出: "1211"

解答

網(wǎng)上都只說從前一個推后一個,但是真的很難看懂,直接引CSDN某大佬的吧。

class Solution:
    def countAndSay(self, n):
        """
        :type n: int
        :rtype: str
        """
        if n == 1:  # 類似于斐波拉契數(shù),后面的數(shù)跟前面的數(shù)有關(guān)
            return '1'
        if n == 2:
            return '11'
        # 進行i=3時的循環(huán)時,它的上一項為'11'
        pre = '11'

        # 用for循環(huán)不斷去計算逼近最后一次
        for i in range(3, n + 1):
            res = ''  # 結(jié)果,每次報數(shù)都要初始化
            cnt = 1  # 計數(shù)變量

            length = len(pre)  # 遍歷我們的上一項,所以記錄它的長度
            for j in range(1, length):
                if pre[j - 1] == pre[j]:  # 相等則加一
                    cnt += 1
                else:
                    # 一旦遇到不同的變量,就更新結(jié)果
                    res += str(cnt) + pre[j - 1]
                    cnt = 1  # 重置為1
            # 把最后一項及它的數(shù)量加上
            res += str(cnt) + pre[j]
            pre = res  # 保存上一次的結(jié)果
        return res

如有疑問或建議,歡迎評論區(qū)留言~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容