[leetcode-273]Integer to English Words(java)

来源:互联网 发布:python 字典删除元素 编辑:程序博客网 时间:2024/05/17 03:19

问题描述:
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”

分析:这道题就是使用最直观的,将整数变成字符串,然后以3为单位将字符串进行切割。然后分别对每一组进行单独处理。
我最开始是将起作为整数进行处理的,可后来发现,当出现1000000时,应该写作One Million,而如果用整数的话,那输出结果会为One Million Thousand,而且似乎没有明显的方法来解决。

代码如下:276ms

public class Solution {    public String numberToWords(int num) {        String str = Integer.toString(num);        StringBuilder builder = new StringBuilder();        if(num==0)            return "Zero";        int length = str.length();        int groups = (length+2)/3;//可以分为多少组        int index = length%3;        int base = groups;        if(index==0)            index = 3;        while(base>=1){            String substr = str.substring(0,index);            if(Integer.parseInt(substr)!=0){                String tmp = parseStr(Integer.parseInt(substr));                builder.append(tmp);                switch (base){                    case 2:                        builder.append("Thousand ");                        break;                    case 3:                        builder.append("Million ");                        break;                    case 4:                        builder.append("Billion ");                        break;                    default:                        break;                }            }            str = str.substring(index);            index = 3;            base--;        }        builder.deleteCharAt(builder.length() - 1);        return builder.toString();    }    private String parseStr(int num){        int base = 100;        StringBuilder builder = new StringBuilder();        while (base>=1){            int val = num/base;            if(val!=0) {                if (val == 1 && base == 10)                    break;                switch (val){                    case 1:                        if(base==100) {                            builder.append("One Hundred ");                        }else if(base == 1)                            builder.append("One ");                        break;                    case 2:                        if(base==100) {                            builder.append("Two Hundred ");                        }else if(base == 10)                            builder.append("Twenty ");                        else                            builder.append("Two ");                        break;                    case 3:                        if(base==100){                            builder.append("Three Hundred ");                        }else if(base == 10)                            builder.append("Thirty ");                        else                            builder.append("Three ");                        break;                    case 4:                        if(base==100)                            builder.append("Four Hundred ");                        else if(base == 10)                            builder.append("Forty ");                        else                            builder.append("Four ");                        break;                    case 5:                        if(base==100)                            builder.append("Five Hundred ");                        else if(base==10)                            builder.append("Fifty ");                        else                            builder.append("Five ");                        break;                    case 6:                        if(base==100)                            builder.append("Six Hundred ");                        else if(base == 10)                            builder.append("Sixty ");                        else                            builder.append("Six ");                        break;                    case 7:                        if(base == 100)                            builder.append("Seven Hundred ");                        else if(base == 10)                            builder.append("Seventy ");                        else                            builder.append("Seven ");                        break;                    case 8:                        if(base==100)                            builder.append("Eight Hundred ");                        else if(base == 10)                            builder.append("Eighty ");                        else                            builder.append("Eight ");                        break;                    case 9:                        if(base==100)                            builder.append("Nine Hundred ");                        else if(base==10)                            builder.append("Ninety ");                        else                            builder.append("Nine ");                        break;                    default:                        break;                }            }            num %= base;            base /= 10;        }        if(num>=10 && num<=19){            switch (num){                case 10:                    builder.append("Ten ");                    break;                case 11:                    builder.append("Eleven ");                    break;                case 12:                    builder.append("Twelve ");                    break;                case 13:                    builder.append("Thirteen ");                    break;                case 14:                    builder.append("Fourteen ");                    break;                case 15:                    builder.append("Fifteen ");                    break;                case 16:                    builder.append("Sixteen ");                    break;                case 17:                    builder.append("Seventeen ");                    break;                case 18:                    builder.append("Eighteen ");                    break;                case 19:                    builder.append("Nineteen ");                    break;                default:                    break;            }        }        return builder.toString();    }}
0 0
原创粉丝点击