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 項。注意 整數順序將表示為乙個字串。每次迭代...