Giả sử chúng ta có một số. Số có thể là bất kỳ thứ gì trong khoảng từ 0 đến 231 - 1. Chúng ta phải chuyển số thành từ. Vì vậy, nếu số giống như 512, thì kết quả sẽ là Năm trăm mười hai.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
Xác định một số danh sách như less_than_20, danh sách này sẽ chứa tất cả các từ từ một đến mười chín
-
Một mảng khác như hàng chục để giữ hàng chục, hai mươi, ba mươi, v.v. lên đến chín mươi
-
Một mảng khác cho hàng nghìn, giữ nghìn, triệu và tỷ
-
Xác định một hàm được gọi là helper (), hàm này sẽ mất n
-
nếu n là 0 thì trả về chuỗi trống
-
ngược lại khi n <20, thì trả về less_than_20 [n] + khoảng trắng
-
ngược lại khi n <100, thì trả về hàng chục [n / 10] + khoảng trắng + trình trợ giúp (n mod 10)
-
nếu không thì trả về less_than_20 [n / 100] + “Hundred” + người trợ giúp (n mod 100)
-
Từ phương thức chính, hãy thực hiện như sau
-
nếu num là 0, thì trả về "Zero"
-
ans:=chuỗi trống, i:=0
-
trong khi num> 0
-
nếu num mod 1000 không phải là 0, thì
-
ans:=helper (num mod 1000) + nghìn [i] + khoảng trắng + ans
-
num:=num / 1000
-
-
-
trả lại ans
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
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