LeetCode-273、整数转换英文表示-困难
将非负整数转换为其对应的英文表示。可以保证给定输入小于 2**31 - 1 。
示例 1:
输入: 123
输出: "One Hundred Twenty Three"
示例 2:
输入: 12345
输出: "Twelve Thousand Three Hundred Forty Five"
示例 3:
输入: 1234567
输出: "One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"
示例 4:
输入: 1234567891
输出: "One Billion Two Hundred Thirty Four Million Five Hundred Sixty Seven Thousand Eight Hundred Ninety One"
代码:
class Solution:
def numberToWords(self, num: int) -> str:
list1 = ['','One','Two','Three','Four','Five','Six','Seven','Eight','Nine']
list2 = ['Ten','Eleven','Twelve','Thirteen','Fourteen','Fifteen','Sixteen','Seventeen','Eighteen','Nineteen']
list3 = ['','','Twenty','Thirty','Forty','Fifty','Sixty','Seventy','Eighty','Ninety']
if num == 0:
return 'Zero'
if num < 10:
return list1[num]
if num < 20:
return list2[num % 10]
if num < 100:
if num % 10 == 0: return list3[num // 10]
else: return list3[num // 10] + ' ' + list1[num % 10]
if num < 10**3:
if num % 100 == 0: return list1[num // 100] + ' ' + 'Hundred'
else: return list1[num // 100] + ' ' + 'Hundred' + ' ' + self.numberToWords(num % 100)
if num < 10**6:
if num % 10**3 == 0: return self.numberToWords(num // 10**3) + ' ' + 'Thousand'
else: return self.numberToWords(num // 10**3) + ' ' + 'Thousand' + ' ' + self.numberToWords(num % 10**3)
if num < 10**9:
if num % 10**6 == 0: return self.numberToWords(num // 10**6) + ' ' + 'Million'
else: return self.numberToWords(num // 10**6) + ' ' + 'Million' + ' ' + self.numberToWords(num % 10**6)
if num < 10**12:
if num % 10**9 == 0: return self.numberToWords(num // 10**9) + ' ' + 'Billion'
else: return self.numberToWords(num // 10**9) + ' ' + 'Billion' + ' ' + self.numberToWords(num % 10**9)