将非负整数 num 转换为其对应的英文表示。
示例 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"
提示:
0 <= num <= 231 - 1
官方题解:
2^31-1 = 2 147 483 647
singles = ["", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"]
teens = ["Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"]
tens = ["", "Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"]
thousand = ["", "Thousand", "Million", "Billion"]
class Solution:
def numberToWords(self, num: int) -> str:
#数为0直接返回“Zero”
if num == 0:
return "Zero"
#内部递归函数
def recursion(num: int) -> str:
#构造一个空字符串
s = ""
if num == 0:
return s
elif num < 10:
s += singles[num] + " "
elif num < 20:
s += teens[num - 10] + " "
elif num < 100:
s += tens[num // 10] + " " + recursion(num % 10)
else:
s += singles[num // 100] + " Hundred " + recursion(num % 100)
return s
s = ""
#2^31-1 = 2 147 483 647
#1*(10^9)=1 000 000 000
unit = int(1e9)
#区间【3,-1)步长为-1,循环4次 3 2 1 0
for i in range(3, -1, -1):
curNum = num // unit#2 147
if curNum:
num -= curNum * unit#147 483 647
s += recursion(curNum) + thousand[i] + " "
unit //= 1000#去除num的前3位1 000 000
return s.strip() #去除s的首尾空格