273. Integer to English Words

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"

Constraints:

  • 0 <= num <= 231 - 1

Approach 01:

#include <string>
#include <vector>
#include <iostream>

using namespace std;

class Solution {
public:
    string numberToWords(int num) {
        if (num == 0) {
            return "Zero";
        }

        return convertToWords(num);
    }

private:
    vector<string> belowTwenty = {
        "", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine",
        "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen",
        "Seventeen", "Eighteen", "Nineteen"
    };

    vector<string> tens = {
        "", "Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"
    };

    string convertToWords(int num) {
        if (num < 20) {
            return belowTwenty[num];
        } else if (num < 100) {
            return tens[num / 10] + (num % 10 != 0 ? " " + belowTwenty[num % 10] : "");
        } else if (num < 1000) {
            return convertToWords(num / 100) + " Hundred" + (num % 100 != 0 ? " " + convertToWords(num % 100) : "");
        } else if (num < 1000000) {
            return convertToWords(num / 1000) + " Thousand" + (num % 1000 != 0 ? " " + convertToWords(num % 1000) : "");
        } else if (num < 1000000000) {
            return convertToWords(num / 1000000) + " Million" + (num % 1000000 != 0 ? " " + convertToWords(num % 1000000) : "");
        } else {
            return convertToWords(num / 1000000000) + " Billion" + (num % 1000000000 != 0 ? " " + convertToWords(num % 1000000000) : "");
        }
    }
};
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 solve(num: int) -> str:
            if num < 20:
                s = belowTwenty[num]
            elif num < 100:
                s = tens[num // 10] + " " + belowTwenty[num % 10]
            elif num < 1000:
                s = solve(num // 100) + " Hundred " + solve(num % 100)
            elif num < 1000000:
                s = solve(num // 1000) + " Thousand " + solve(num % 1000)
            elif num < 1000000000:
                s = solve(num // 1000000) + " Million " + solve(num % 1000000)
            else:
                s = solve(num // 1000000000) + " Billion " + solve(num % 1000000000)
            return s.strip()

        return solve(num)

Time Complexity

  • Recursive Calls:

    The function convertToWords recursively processes the number by dividing it into smaller parts (hundreds, thousands, millions, etc.). Each recursive call handles a part of the number, and the depth of recursion is proportional to the number of digits in num. Since each recursive call processes a portion of the number in constant time, the time complexity is \( O(\log_{10} \text{num}) \).

  • Overall Time Complexity:

    The time complexity is \( O(\log_{10} \text{num}) \), where \text{num} is the input integer.

Space Complexity

  • Recursive Call Stack:

    The space complexity is influenced by the depth of the recursive call stack, which is \( O(\log_{10} \text{num}) \). This is due to the recursive function calls, each handling a part of the number.

  • Overall Space Complexity:

    The overall space complexity is \( O(\log_{10} \text{num}) \) due to the recursion stack space used.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top