ETH官方钱包

前往
大廳
主題

LeetCode - 0481. Magical String 解題心得

Not In My Back Yard | 2024-05-07 12:00:04 | 巴幣 0 | 人氣 113

題目連結(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 即可。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創(chuàng)作回應(yīng)

相關(guān)創(chuàng)作

更多創(chuàng)作