JIAKAOBO

LeetCode

venmo
wechat

感谢赞助!

  • ㊗️
  • 大家
  • offer
  • 多多!

Problem

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"

Code

class Solution {
    private final String[] belowTen
            = new String[]{"", "One", "Two", "Three", "Four",
            "Five", "Six", "Seven", "Eight", "Nine"};

    private final String[] belowTwenty
            = new String[]{"Ten", "Eleven", "Twelve", "Thirteen",
            "Fourteen", "Fifteen", "Sixteen", "Seventeen",
            "Eighteen", "Nineteen"};

    private final String[] belowHundred
            = new String[]{"", "Ten", "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) {
        String result = null;
        // 1 - 9
        if (num < 10) {
            result = belowTen[num];
        // 10 - 19
        } else if (num < 20) {
            result = belowTwenty[num - 10];
        // 20 - 99
        } else if (num < 100) {
            // 几十几 + 几
            result = belowHundred[num / 10] + " " + helper(num % 10);
        // 100 - 999
        } else if (num < 1000) {
            // 几百 + 几十几
            result = helper(num / 100) + " Hundred " + helper(num % 100);
        // 1000 - 999,999    
        } else if (num < 1000000) {
            // 几千 + 百
            result = helper(num / 1000) + " Thousand " + helper(num % 1000);
        // 1,000,000 -  999,999,999
        } else if (num < 1000000000) {
            result = helper(num / 1000000) + " Million " + helper(num % 1000000);
        // 1,000,000,000+    
        } else {
            result = helper(num / 1000000000) + " Billion " + helper(num % 1000000000);
        }

        return result.trim();
    }
}