Giả sử ta có một số. Số đó có thể là bất kỳ giá trị nào từ 0 đến 2^31 - 1. Ta phải chuyển đổi số đó thành chữ. Vì vậy, nếu số là 512, kết quả sẽ là "Five hundred twelve".
Để giải quyết, ta thực hiện các bước sau:
- Định nghĩa các danh sách như less_than_20, chứa các từ từ one đến nineteen
- Mảng khác như tens để chứa twenty, thirty... đến ninety
- Mảng khác cho thousands, chứa thousand, million, billion
- Định nghĩa hàm helper(), nhận n
- Nếu n là 0, trả về chuỗi rỗng
- Ngược lại, nếu n < 20, trả về less_than_20[n] + khoảng trắng
- Ngược lại, nếu n < 100, trả về tens[n/10] + khoảng trắng + helper(n mod 10)
- Ngược lại trả về less_than_20[n/100] + "Hundred" + helper(n mod 100)
- Từ phương thức chính, thực hiện:
- Nếu num là 0, trả về "Zero"
- ans := chuỗi rỗng, i := 0
- Khi num > 0
- Nếu num mod 1000 khác 0, thì
- ans := helper(num mod 1000) + thousands[i] + khoảng trắng + ans
- i += 1
- num //= 1000
- Nếu num mod 1000 khác 0, thì
- Trả về ans.strip()
Hãy xem triển khai sau để hiểu rõ hơn:
Ví dụ
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))
Đầu vào
512 7835271
Đầu ra
Five Hundred Twelve Seven Million Eight Hundred Thirty Five Thousand Two Hundred Seventy One