前往
大廳
主題

LeetCode - 0273. Integer to English Words 解題心得

Not In My Back Yard | 2023-12-09 12:00:03 | 巴幣 0 | 人氣 94

題目連結:


題目意譯:
將一個非負整數轉換為其對應的英文字詞表示法。

限制:
0 ≦ num ≦ 2 ^ 31 - 1



範例測資:
範例 1:
輸入: num = 123
輸出: "One Hundred Twenty Three"

範例 2:
輸入: num = 12345
輸出: "Twelve Thousand Three Hundred Forty Five"

範例 3:
輸入: num = 1234567
輸出: "One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"


解題思維:
不建議寫本題,只是浪費時間。



就是單純地流程控制而已。

英文數字(實際上這題並不是真正的英文數字之正式表示法,例如說本題會寫 "Five Hundred One",而非 "Five Hundred And One" 等)是以每四位數作為一個「區塊」,例如:764 、 50 千(Thousand)、 72 百萬(Miliion)、 2 十億(Billion)……

所以我們可以先從高位的單位開始判斷,也就是以十億、百萬、千以及千以內的部分。

如果 num 在某部分為零則不做任何輸出、不為零則需輸出。例如說 num = 1234567 在十億部分是 0,因此不輸出;百萬部分不為零(值為 1),因此輸出 "One Million" 等等。

而這些區塊各自的部分與千以內的部分實際上是相同的,也就是說 512000000 在百萬部分是 "Five Hundred Twelve",而其與 512000 在千部分和 512 的千以內之部分都是一樣的。

所以這些區塊各自的處理方式都是與千以內的部分都是相同的。而這邊的邏輯也是類似,先看百,再看百以內(是的這邊所有英文表示法,包含上面的大單位,都是要自己建表)。一樣,如果有部分為零,則不輸出(不過還是要記得把各個區塊之間用空白隔開)。

最後只需要額外判斷 num 本身是否為零,如果是則回傳 "Zero";反之,則按照上述作法來轉換。




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

創作回應

相關創作

更多創作