跟黃哥學程式設計:Python求解外觀數列

有人問下面的題目

跟黃哥學程式設計:Python求解外觀數列

這個問題是“外觀數列”的問題。

外觀數列(Look-and-say sequence)第n項描述了第n-1項的數字分佈。它以1開始:

1:讀作1個“1”,即11

11:讀作2個“1”,即21

21:讀作1個“2”,1個“1”,即1211

1211:讀作1個“1”,1個“2”,2個“1”,即111221

111221:讀作3個“1”,2個“2”,1個“1”,即312211

1, 11, 21, 1211, 111221, 312211, 13112221, 1113213211, 。。。 (OEIS中的數列A005150)

如果從 0 至 9 中的任選一個d數字生成這個數列,那麼可以確定d會保留在每一項的最後一位,如果d不是1的話,那麼這個數列是:

d, 1d, 111d, 311d, 13211d, 111312211d, 31131122211d, …

解題思路:

1、要寫一個函式去分解111221 這樣的數字,輸入是這樣的數字,輸出是這個數字出現的次數和該數字的組合。

2、用棧來儲存遍歷數字(數字轉為字串)。

3、用字典儲存上一項。

按照上面的思路黃哥所寫的程式碼如下:

跟黃哥學程式設計:Python求解外觀數列

可以將字典中的字串變為數字,用int() 轉換一下即可。