Problem
Convert a non-negative integer num to its English words representation.文章来源:https://uudwc.com/A/9d1G5
Algorithm
Three consecutive digit make one group. Simulation processing will suffice and specifically deal the number less than 20.文章来源地址https://uudwc.com/A/9d1G5
Code
class Solution:
def numberToWords(self, num: int) -> str:
def units(num):
if 1 == num: return "One"
elif 2 == num: return "Two"
elif 3 == num: return "Three"
elif 4 == num: return "Four"
elif 5 == num: return "Five"
elif 6 == num: return "Six"
elif 7 == num: return "Seven"
elif 8 == num: return "Eight"
elif 9 == num: return "Nine"
elif 10 == num: return "Ten"
elif 11 == num: return "Eleven"
elif 12 == num: return "Twelve"
elif 13 == num: return "Thirteen"
elif 14 == num: return "Fourteen"
elif 15 == num: return "Fifteen"
elif 16 == num: return "Sixteen"
elif 17 == num: return "Seventeen"
elif 18 == num: return "Eighteen"
elif 19 == num: return "Nineteen"
return ""
def tens(num):
if 2 == num: return "Twenty"
elif 3 == num: return "Thirty"
elif 4 == num: return "Forty"
elif 5 == num: return "Fifty"
elif 6 == num: return "Sixty"
elif 7 == num: return "Seventy"
elif 8 == num: return "Eighty"
elif 9 == num: return "Ninety"
return ""
def two_digit(num):
if num < 20:
return units(num)
else:
ans = tens(num // 10)
num = num - num // 10 * 10
if num > 0:
ans += " " + units(num - num // 10 * 10)
return ans
def three_digit(num):
ans = ""
if num >= 100:
ans += units(num // 100) + " Hundred"
num = num - num // 100 * 100
if num > 0:
if ans != "": ans += " "
ans += two_digit(num)
return ans
if 0 == num:
return "Zero"
ans = ""
if num >= 1000000000:
ans += three_digit(num // 1000000000) + " Billion"
num = num - num // 1000000000 * 1000000000
if num >= 1000000:
if ans != "": ans += " "
ans += three_digit(num // 1000000) + " Million"
num = num - num // 1000000 * 1000000
if num >= 1000:
if ans != "": ans += " "
ans += three_digit(num // 1000) + " Thousand"
num = num - num // 1000 * 1000
if num > 0:
if ans != "": ans += " "
ans += three_digit(num)
return ans