題目連結:
題目意譯:
將一個非負整數轉換為其對應的英文字詞表示法。
限制:
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";反之,則按照上述作法來轉換。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。