Integer to English Words

Convert a non-negative integer to its english words representation. Given input is guaranteed to be less than 231 - 1.

Example 1:

Input: 123
Output: "One Hundred Twenty Three"

Example 2:

Input: 12345
Output: "Twelve Thousand Three Hundred Forty Five"

Example 3:

Input: 1234567
Output: "One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"

Example 4:

Input: 1234567891
Output: "One Billion Two Hundred Thirty Four Million Five Hundred Sixty Seven Thousand Eight Hundred Ninety One"
class Solution {
    
    public static String[] UNDER_TWENTY  = new String[]{
        "", "One","Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten",
        "Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen","Seventeen","Eighteen","Nineteen"
    };
    
    public static String[] OVER_TWENTY = new String[]{
        "","Ten","Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety"
    };
    
    public static String[] ON_THOUSAND = new String[]{
        "","Thousand","Million","Billion"
        
    };
    
    public String numberToWords(int num) {
        if(num == 0)
            return "Zero";
        
        int i = 0;
        String res = "";
        while(num > 0){
            String pre = helper(num % 1000);
            
            if(pre != ""){
                res = pre + " "+ ON_THOUSAND[i] + " "+res;
            }
            
            num /= 1000;
            i++;
        }
        
        return res.trim();
    }
    
    public String helper(int num){
        String s = "";
        
        if(num < 20){
            s = UNDER_TWENTY[num];
        }
        
        else if(num < 100){
            s = OVER_TWENTY[num/10] + " "+UNDER_TWENTY[num%10];
        }else{
            s = UNDER_TWENTY[num/100] + " Hundred "+ helper(num%100);
        }
        
        return s.trim();
    }
}

Last updated