LeetCode 273 Integer to English Words

77 篇文章 8 订阅
60 篇文章 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();
    }
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值