Integer to English Words LeetCode Solution

Last updated on January 14th, 2025 at 06:28 am

Here, we see an Integer to English Words LeetCode Solution. This Leetcode problem is solved using different approaches in many programming languages, such as C++, Java, JavaScript, Python, etc.

List of all LeetCode Solution

Topics

Math, String

Companies

Facebook, Microsoft

Level of Question

Hard

Integer to English Words LeetCode Solution

Integer to English Words LeetCode Solution

1. Problem Statement

Convert a non-negative integer num to its English words representation.

Example 1:
Input: num = 123
Output: “One Hundred Twenty Three”

Example 2:
Input: num = 12345
Output: “Twelve Thousand Three Hundred Forty Five”

Example 3:
Input: num = 1234567
Output: “One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven”

2. Coding Pattern Used in Solution

The coding pattern used in all the provided implementations is “Divide and Conquer”. The problem of converting a number to words is broken down into smaller subproblems (e.g., handling billions, millions, thousands, hundreds, tens, and units) and solved recursively.

3. Code Implementation in Different Languages

3.1 Integer to English Words C++

class Solution {
public:
    string numberToWords(int num) {
        if(num == 0) return "Zero";
        else return int_string(num).substr(1);
    }
private:
    static const char * const below_20[];
    static const char * const below_100[];
    static string int_string(int num) {
        if(num >= 1000000000)   return int_string(num / 1000000000) + " Billion" + int_string(num - 1000000000 * (num / 1000000000));
        else if(num >= 1000000) return int_string(num / 1000000) + " Million" + int_string(num - 1000000 * (num / 1000000));
        else if(num >= 1000)    return int_string(num / 1000) + " Thousand" + int_string(num - 1000 * (num / 1000));
        else if(num >= 100)     return int_string(num / 100) + " Hundred" + int_string(num - 100 * (num / 100));
        else if(num >= 20)      return string(" ") + below_100[num / 10 - 2] + int_string(num - 10 * (num / 10));
        else if(num >= 1)       return string(" ") + below_20[num - 1];
        else return "";
        }
};
const char * const Solution::below_20[] =  {"One", "Two", "Three", "Four","Five","Six","Seven","Eight","Nine","Ten", "Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen","Seventeen","Eighteen","Nineteen"};
const char * const Solution::below_100[] = {"Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};

3.2 Integer to English Words Java

class Solution {
    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"};
    public String numberToWords(int num) {
        if (num == 0) {
            return "Zero";
        }
        return helper(num);
    }

    private String helper(int num) {
        StringBuilder result = new StringBuilder();
        if (num < 20) {
            result.append(belowTwenty[num]);
        } else if (num < 100) {
            result.append(tens[num / 10]).append(" ").append(belowTwenty[num % 10]);
        } else if (num < 1000) {
            result.append(helper(num / 100)).append(" Hundred ").append(helper(num % 100));
        } else if (num < 1000000) {
            result.append(helper(num / 1000)).append(" Thousand ").append(helper(num % 1000));
        } else if (num < 1000000000) {
            result.append(helper(num / 1000000)).append(" Million ").append(helper(num % 1000000));
        } else {
            result.append(helper(num / 1000000000)).append(" Billion ").append(helper(num % 1000000000));
        }
        return result.toString().trim();
    }
}

3.3 Integer to English Words JavaScript

var numberToWords = function(num) {
  if (num === 0) {
    return 'Zero';
  }
  if (num <= 20) {
    return translations.get(num);
  }
  let result = [];
  for (let [value, translation] of translations) {
    const times = Math.floor(num / value);
    if (times === 0) {
      continue;
    }
    num -= times * value;
    if (times === 1 && value >= 100) {
      result.push('One', translation);
      continue;
    }
    if (times === 1) {
      result.push(translation);
      continue;
    }
    result.push(numberToWords(times), translation);
  }
  return result.join(' ');
};

const translations = new Map([
  [1000000000, 'Billion'],
  [1000000, 'Million'],
  [1000, 'Thousand'],
  [100, 'Hundred'],
  [90, 'Ninety'],
  [80, 'Eighty'],
  [70, 'Seventy'],
  [60, 'Sixty'],
  [50, 'Fifty'],
  [40, 'Forty'],
  [30, 'Thirty'],
  [20, 'Twenty'],
  [19, 'Nineteen'],
  [18, 'Eighteen'],
  [17, 'Seventeen'],
  [16, 'Sixteen'],
  [15, 'Fifteen'],
  [14, 'Fourteen'],
  [13, 'Thirteen'],
  [12, 'Twelve'],
  [11, 'Eleven'],
  [10, 'Ten'],
  [9, 'Nine'],
  [8, 'Eight'],
  [7, 'Seven'],
  [6, 'Six'],
  [5, 'Five'],
  [4, 'Four'],
  [3, 'Three'],
  [2, 'Two'],
  [1, 'One'],
]);

3.4 Integer to English Words Python

class Solution(object):
    def numberToWords(self, num):
        to19 = 'One Two Three Four Five Six Seven Eight Nine Ten Eleven Twelve ' \
           'Thirteen Fourteen Fifteen Sixteen Seventeen Eighteen Nineteen'.split()
        tens = 'Twenty Thirty Forty Fifty Sixty Seventy Eighty Ninety'.split()
        def words(n):
            if n < 20:
                return to19[n-1:n]
            if n < 100:
                return [tens[n/10-2]] + words(n%10)
            if n < 1000:
                return [to19[n/100-1]] + ['Hundred'] + words(n%100)
            for p, w in enumerate(('Thousand', 'Million', 'Billion'), 1):
                if n < 1000**(p+1):
                    return words(n/1000**p) + [w] + words(n%1000**p)
        return ' '.join(words(num)) or 'Zero'

4. Time and Space Complexity

Time ComplexitySpace Complexity
C++O(d)O(d)
JavaO(d)O(d)
JavaScriptO(d)O(d)
PythonO(d)O(d)

where d is the number of digits in the input number.

  • Constant Magnitude Levels: The recursion depth is limited to the number of magnitude levels (billions, millions, thousands, etc.), which is constant (4 levels).
  • String Concatenation: The space complexity includes the space required for the result string, which grows linearly with the number of digits in the input number.
  • Efficiency: The algorithm is efficient for typical integer inputs, as the recursion depth is bounded and the processing of each digit is straightforward.
Scroll to Top