題目連結(jié):
題目意譯:
一個魔幻字串 s 只由 '1' 和 '2' 所組成遵循以下規(guī)則:
字串 s 是魔幻的,因為從左至右掃過的連續(xù) 1 和 2 之?dāng)?shù)量所形成的數(shù)列串接在一起後會形成 s 本身。
s 的開頭若干個元素為 s = "1221121221221121122……"。如果我們將 s 中連續(xù)的 1 和 2 各自形成一組一組各自的群體,則其將會變成是 "1 22 11 2 1 22 1 22 11 2 11 22 ……",而每一個群體的出現(xiàn)次數(shù)將會是 "1 2 2 1 1 2 1 2 2 1 2 2 ……"。你可以看到這出現(xiàn)次數(shù)數(shù)列是 s 本身。
(譯者注:如果這個例子不夠清楚,則可以參見
這題,精神基本一樣。)
給定一整數(shù) n,回傳在魔幻字串 s 中前 n 位數(shù)字中 1 的數(shù)量。
(譯者注:根據(jù)題目的「魔幻」本身的定義並不代表著 s 是唯一的。另一種可能為 s = "221121221221121122……",即上面的題目給定的 s 去掉開頭的 1。而本題是要用給定的 s = "1221121221221121122……")
限制:
1 ≦ n ≦ 10 ^ 5
範(fàn)例測資:
範(fàn)例 1:
輸入: n = 6
輸出: 3
解釋: 魔幻字串 s 的前 6 個元素為 "122112" 而其包含著三個 1,所以回傳 3。
範(fàn)例 2:
輸入: n = 1
輸出: 1
解題思維:
把 s 前 n 個元素生成出來並統(tǒng)計即可。
生成方法如下:
一開始 s = "122"。
接著從第二個 2 開始(因為前兩個數(shù)字已經(jīng)滿足了)。假設(shè)現(xiàn)在看到數(shù)字 c,則新增 c 個與當(dāng)前結(jié)尾的數(shù)字不同的另一個數(shù)字(即如果當(dāng)前結(jié)尾是 2,則應(yīng)選 1;反之,則應(yīng)選 2)到結(jié)尾。
例如說,一開始看到第二個 2,而結(jié)尾是 2,因此要新增 2 個 1 到結(jié)尾。因此此時 s = "12211"。
接著看到第二個 1,而結(jié)尾是 1,因此要新增 1 個 2 到結(jié)尾。因此此時 s = "122112"。以此類推。
重複以上步驟直到 s 的長度大於或等於 n 即可。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。