码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 273 Integer to English Words

时间:2016-08-24 11:25:31      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:

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

For example,

123 -> "One Hundred Twenty Three"
12345 -> "Twelve Thousand Three Hundred Forty Five"
1234567 -> "One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"

题目链接:https://leetcode.com/problems/integer-to-english-words/

题目分析:以Thousand,Million,Billion为分割点,三位三位的去处理,注意0的特殊情况

public class Solution {
    
    final String[] units = {"Zero", "One ", "Two ", "Three ", "Four ", "Five ", "Six ", "Seven ", "Eight ", "Nine "};
    final String[] tens1 = {"Ten ", "Eleven ", "Twelve ", "Thirteen ", "Fourteen ", "Fifteen ", "Sixteen ", "Seventeen ", "Eighteen ", "Nineteen "};
    final String[] tensn = {"", "", "Twenty ", "Thirty ", "Forty ", "Fifty ", "Sixty ", "Seventy ", "Eighty ", "Ninety "};
    final String[] base = {"Hundred ", "Thousand ", "Million ", "Billion "};
    final int Billion = 1000000000;
    final int Million = 1000000;
    final int Thousand = 1000;
    final int Hundred = 100;
    final int Ten = 10;
    
    //处理十位数
    public String TNumToWords(int num) {
        StringBuffer ans = new StringBuffer("");
        if(num / Ten == 1) {
            ans.append(tens1[num - Ten]);
        }
        else {
            ans.append(tensn[num / Ten]);
            if(num % Ten != 0) {
                ans.append(units[num % Ten]);
            }
        }
        return ans.toString();
    }
    
    //处理百位数
    public String HNumToWords(int num) {
        StringBuffer ans = new StringBuffer("");
        int H = num / Hundred;
        if(H < Ten) {
            ans.append(units[H]);
            ans.append(base[0]);
        }
        else if(H < Hundred) {
            ans.append(TNumToWords(H));
            ans.append(base[0]);
        }
        ans.append(TNumToWords(num % Hundred));
        return ans.toString();
    }
    
    //判断是个位十位还是百位数
    public String getType(int num) {
        StringBuffer ans = new StringBuffer("");
        if(num < Ten) {
            ans.append(units[num]);
        }
        else if(num < Hundred) {
            ans.append(TNumToWords(num));
        }
        else {
            ans.append(HNumToWords(num));
        }
        return ans.toString();
    }
    
    public String numberToWords(int num) {
        StringBuffer ans = new StringBuffer("");
        if(num == 0) {
            ans.append(units[0]);
            return ans.toString();
        }
        if(num / Billion != 0) {
            ans.append(getType(num / Billion));
            ans.append(base[3]);
            num %= Billion;
        }
        if(num / Million != 0) {
            ans.append(getType(num / Million));
            ans.append(base[2]);
            num %= Million;
        }
        if(num / Thousand != 0) {
            ans.append(getType(num / Thousand));
            ans.append(base[1]);
            num %= Thousand;
        }
        if(num != 0) {
            ans.append(getType(num));
        }
        ans.deleteCharAt(ans.length() - 1);
        return ans.toString();
    }
}




LeetCode 273 Integer to English Words

标签:

原文地址:http://blog.csdn.net/tc_to_top/article/details/52297247

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!