# 273. Integer to English Words

• Time:
• Space:
 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 class Solution { public: string numberToWords(int num) { if (num == 0) return "Zero"; return helper(num); } private: const vector belowTwenty{ "", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"}; const vector tens{"", "", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"}; string helper(int num) { string s; if (num < 20) s = belowTwenty.at(num); else if (num < 100) s = tens.at(num / 10) + " " + belowTwenty.at(num % 10); else if (num < 1000) s = helper(num / 100) + " Hundred " + helper(num % 100); else if (num < 1000000) s = helper(num / 1000) + " Thousand " + helper(num % 1000); else if (num < 1000000000) s = helper(num / 1000000) + " Million " + helper(num % 1000000); else s = helper(num / 1000000000) + " Billion " + helper(num % 1000000000); trim(s); return s; } void trim(string& s) { s.erase(0, s.find_first_not_of(' ')); s.erase(s.find_last_not_of(' ') + 1); } };
 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 class Solution { public String numberToWords(int num) { return num == 0 ? "Zero" : helper(num); } private final String[] belowTwenty = {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"}; private final String[] tens = {"", "", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"}; private String helper(int num) { StringBuilder s = new StringBuilder(); if (num < 20) s.append(belowTwenty[num]); else if (num < 100) s.append(tens[num / 10]).append(" ").append(belowTwenty[num % 10]); else if (num < 1000) s.append(helper(num / 100)).append(" Hundred ").append(helper(num % 100)); else if (num < 1000000) s.append(helper(num / 1000)).append(" Thousand ").append(helper(num % 1000)); else if (num < 1000000000) s.append(helper(num / 1000000)).append(" Million ").append(helper(num % 1000000)); else s.append(helper(num / 1000000000)).append(" Billion ").append(helper(num % 1000000000)); return s.toString().trim(); } }
 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 class Solution: def numberToWords(self, num: int) -> str: if num == 0: return "Zero" belowTwenty = ["", "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"] def helper(num: int) -> str: if num < 20: s = belowTwenty[num] elif num < 100: s = tens[num // 10] + " " + belowTwenty[num % 10] elif num < 1000: s = helper(num // 100) + " Hundred " + helper(num % 100) elif num < 1000000: s = helper(num // 1000) + " Thousand " + helper(num % 1000) elif num < 1000000000: s = helper(num // 1000000) + " Million " + \ helper(num % 1000000) else: s = helper(num // 1000000000) + " Billion " + \ helper(num % 1000000000) return s.strip() return helper(num)