Problem Description
Explanation
To solve this problem, we can break down the number into groups of three digits each (thousands, millions, billions, etc.) and then convert each group into its English words representation. We can then combine these representations for each group to form the final result.
We can create helper functions to convert a single digit, two digits, and three digits into English words. By processing the number in groups of three digits, we can handle each group separately and then combine the results with appropriate thousand/million/billion separators.
Time Complexity: O(1) as the maximum number of iterations is constant for any given input. Space Complexity: O(1) as the space used is constant for any input.
Solutions
class Solution {
private final String[] LESS_THAN_20 = {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"};
private final String[] TENS = {"", "Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};
private final String[] THOUSANDS = {"", "Thousand", "Million", "Billion"};
public String numberToWords(int num) {
if (num == 0) return "Zero";
String words = "";
int i = 0;
while (num > 0) {
if (num % 1000 != 0) {
words = helper(num % 1000) + THOUSANDS[i] + " " + words;
}
num /= 1000;
i++;
}
return words.trim();
}
private String helper(int num) {
if (num == 0) return "";
else if (num < 20) return LESS_THAN_20[num] + " ";
else if (num < 100) return TENS[num / 10] + " " + helper(num % 10);
else return LESS_THAN_20[num / 100] + " Hundred " + helper(num % 100);
}
}
Related LeetCode Problems
Loading editor...