273. Integer to English Words

273. 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"

My Solutions:

因为前20个数字是唯一的,所以必须单独处理。

注意最后要trim一下,去掉可能的空格。

class Solution {
    public String numberToWords(int num) {
        if(num == 0) return "Zero";
        return helper(num);
    }
    public String helper(int num) {
        String[] words = new String[] {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine",
        "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};
        
        StringBuilder res = new StringBuilder();
        
        if(num >= 1000000000) {
            res.append(helper(num / 1000000000)).append(" Billion ").append(helper(num % 1000000000));
        } else if(num >= 1000000) {
            res.append(helper(num / 1000000)).append(" Million ").append(helper(num % 1000000));
        } else if(num >= 1000) {
            res.append(helper(num / 1000)).append(" Thousand ").append(helper(num % 1000));
        } else if(num >= 100) {
            res.append(helper(num / 100)).append(" Hundred ").append(helper(num % 100));
        } else if(num >= 20) {
            res.append(words[(num - 20) / 10 + 20]).append(" ").append(words[num % 10]);
        } else {
            res.append(words[num]);
        }
        
        return res.toString().trim();
    }
}

Last updated