題目連結:
題目意譯:
你被給定一個包含著小寫英文字母的字串 s,以及一整數 k。
首先,將 s 轉換為一整數藉由將每個字母替換為它們在字母表中的位置(即將 'a' 替換為 1 、 'b' 替換為 '2' 、……、'z' 換成 26)。接著將該整數變換為其各個位數總和之值。總共重複此變換 k 次。
例如,如果 s = "zbax" 且 k = 2,則結果之整數將會是 8 由於以下操作:
轉換: "zbax" ? "(26)(2)(1)(24)" ? "262124" ? 262124
變換 #1: 262124 ? 2 + 6 + 2 + 1 + 2 + 4 ? 17
變換 #2: 17 ? 1 + 7 ? 8
回傳執行上述操作後的結果之整數值。
限制:
1 <= s.length <= 100
1 <= k <= 10
s 由小寫英文字母組成。
範例測資:
範例 1:
輸入: s = "iiii", k = 1
輸出: 36
解釋: The operations are as follows:
- 轉換: "iiii" ? "(9)(9)(9)(9)" ? "9999" ? 9999
- 變換 #1: 9999 ? 9 + 9 + 9 + 9 ? 36
因此結果為 36。
範例 2:
輸入: s = "leetcode", k = 2
輸出: 6
解釋: The operations are as follows:
- 轉換: "leetcode" ? "(12)(5)(5)(20)(3)(15)(4)(5)" ? "12552031545" ? 12552031545
- 變換 #1: 12552031545 ? 1 + 2 + 5 + 5 + 2 + 0 + 3 + 1 + 5 + 4 + 5 ? 33
- 變換 #2: 33 ? 3 + 3 ? 6
因此結果為 6。
範例 3:
輸入: s = "zbax", k = 2
輸出: 8
解題思維:
就是單純地模擬即可。不過因為 s 的長度可以到 100,所以我們第一次變換的起始數字可能很大無法裝進 64 位元的整數型態中(當然,Python 則沒有這問題)。
因此我們可以直接在轉換 s 的階段的同時就做完第一次變換,畢竟我們已經掃過了 s 也知道每個字母的對應數值,所以掃完之後便可以順便得到第一次變換後的數值(現在這階段數字最大不超過 1000)。
接著就做完剩下的 k - 1 次變換即可得到所求的數值。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。