ETH官方钱包

前往
大廳
主題

LeetCode - 1945. Sum of Digits of String After Convert 解題心得

Not In My Back Yard | 2021-12-11 00:00:01 | 巴幣 0 | 人氣 199

題目連結:


題目意譯:
你被給定一個包含著小寫英文字母的字串 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 次變換即可得到所求的數值。




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

創作回應

相關創作

更多創作