LeetCode刷題(38 外觀數列)

2021-10-21 08:38:07 字數 1670 閱讀 6131

38. 外觀數列

給定乙個正整數 n ,輸出外觀數列的第 n 項。

「外觀數列」是乙個整數序列,從數字 1 開始,序列中的每一項都是對前一項的描述。

你可以將其視作是由遞迴公式定義的數字字串序列:

countandsay(1) = 「1」

countandsay(n) 是對 countandsay(n-1) 的描述,然後轉換成另乙個數字字串。

前五項如下:

1

11

21

1211

111221

第一項是數字 1

描述前一項,這個數是 1 即 「 一 個 1 」,記作 「11」

描述前一項,這個數是 11 即 「 二 個 1 」 ,記作 「21」

描述前一項,這個數是 21 即 「 一 個 2 + 一 個 1 」 ,記作 「1211」

描述前一項,這個數是 1211 即 「 一 個 1 + 一 個 2 + 二 個 1 」 ,記作 「111221」

要 描述 乙個數字字串,首先要將字串分割為 最小 數量的組,每個組都由連續的最多 相同字元 組成。然後對於每個組,先描述字元的數量,然後描述字元,形成乙個描述組。要將描述轉換為數字字串,先將每組中的字元數量用數字替換,再將所有描述組連線起來。

示例 1:

輸入:n = 1

輸出:「1」

解釋:這是乙個基本樣例。

示例 2:

輸入:n = 4

輸出:「1211」

解釋:countandsay(1) = 「1」

countandsay(2) = 讀 「1」 = 一 個 1 = 「11」

countandsay(3) = 讀 「11」 = 二 個 1 = 「21」

countandsay(4) = 讀 「21」 = 一 個 2 + 一 個 1 = 「12」 + 「11」 = 「1211」

解析:利用迭代的方法,來求解此題。

class

solution

:def

countandsay

(self, n:

int)

->

str:

s ='1'for i in

range

(n-1):

t ='' i,j,count =0,

len(s),1

while i < j-1:

if s[i]

== s[i+1]

:#相鄰兩個元素相等,即count個s[i]

count +=

1 i +=

1else

: t = t +

str(count)

+ s[i]

count =

1 i +=

1 s = t +

str(count)

+ s[i]

return s

leetcode刷題 38 外觀數列

外觀數列 是乙個整數序列,從數字 1 開始,序列中的每一項都是對前一項的描述。前五項如下 1 11 21 1211 1112211 被讀作 one 1 乙個一 即 11。11 被讀作 two 1s 兩個一 即 21。21 被讀作 one 2 one 1 乙個二 乙個一 即 1211。給定乙個正整數 ...

Leetcode刷題 38 外觀數列

參考部落格 題目描述 解題思路 理解一下題目的意思,外觀數列是乙個整數序列,從數字1開始,序列中的每一項都是對前一項的描述。我們需要根據輸入的n,輸出外觀陣列的第n項 n從1開始 使用迭代來做,以根據第三項21求第4項作為例子。首先設定當前的數字為2項的第乙個字元2,以及當前數字2連續出現多少次cn...

Leetcode刷題(38 報數)

示例 1 1121 1211 111221 1 被讀作 one 1 乙個一 即 11。11 被讀作 two 1s 兩個一 即 21。21 被讀作 one 2 one 1 乙個二 乙個一 即 1211。給定乙個正整數 n 1 n 30 輸出報數序列的第 n 項。注意 整數順序將表示為乙個字串。每次迭代...