สมมติว่าเรามีตัวเลข ตัวเลขสามารถเป็นอะไรก็ได้ระหว่าง 0 ถึง 231 – 1 เราต้องแปลงตัวเลขเป็นคำ ดังนั้นหากตัวเลขเช่น 512 ผลที่ได้จะเป็นห้าร้อยสิบสอง
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดรายการบางอย่างเช่น less_than_20 ซึ่งจะเก็บคำทั้งหมดตั้งแต่หนึ่งถึงสิบเก้า
-
อาร์เรย์อื่นๆ เช่น หลักสิบ ถือหลักสิบ ยี่สิบ สามสิบ และต่อไปเรื่อยๆ จนถึงเก้าสิบ
-
อีกอาร์เรย์สำหรับหลักพัน ถือหลักพัน ล้าน และพันล้าน
-
กำหนดหนึ่งฟังก์ชันที่เรียกว่า helper() ซึ่งจะใช้เวลา n
-
ถ้า n เป็น 0 ให้คืนค่าสตริงว่าง
-
มิฉะนั้นเมื่อ n <20 ให้คืนค่า less_than_20[n] + ช่องว่าง
-
มิฉะนั้นเมื่อ n <100 ให้คืนค่า tens[n/10] + ช่องว่าง + helper(n mod 10)
-
มิฉะนั้นให้คืนค่า less_than_20[n/100] + “Hundred” + helper(n mod 100)
-
จากวิธีหลัก ให้ทำดังนี้
-
ถ้า num เป็น 0 ให้คืนค่า "Zero"
-
ตอบ :=สตริงว่าง ผม :=0
-
ในขณะที่ num> 0
-
ถ้า num mod 1000 ไม่ใช่ 0 แล้ว
-
ans :=helper(num mod 1000) + พัน[i] + ช่องว่าง + ans
-
-
-
-
กลับมาอีกครั้ง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution(object): less_than_20 = ["", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"] tens = ["","Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"] thousands = ["", "Thousand", "Million", "Billion"] def numberToWords(self, num): if num == 0: return "Zero" ans = "" i = 0 while num > 0: if num % 1000 != 0: ans = self.helper(num % 1000) + Solution.thousands[i] + " " + ans i += 1 num //= 1000 return ans.strip() def helper(self, n): if n == 0: return "" elif n < 20: return Solution.less_than_20[n] + " " elif n < 100: return Solution.tens[n//10] + " " + self.helper(n % 10) else: return Solution.less_than_20[n // 100] + " Hundred " + self.helper(n % 100) ob = Solution() print(ob.numberToWords(512)) print(ob.numberToWords(7835271))
อินพุต
512 7835271
ผลลัพธ์
Five Hundred Twelve Seven Million Eight Hundred Thirty Five Thousand Two Hundred Seventy One