【LeetCode】273. Integer to English Words 解题报告


转载请注明出处:http://blog.csdn.net/crazy1235/article/details/52756494


Subject

出处:https://leetcode.com/problems/integer-to-english-words/


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

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”


Explain

将整形数字转成英文单词表示。
英文单词表示数字都是三位一组。

Thousand - Million - Billion 。

思路就是 提前将 1-19,20,30,40,50,60,70,80,90,100,1000,1000000,1000000000 对应的英文单词表示出来。然后进行整合。


Solution

solution 1

从大到小。

    public String numberToWords(int num) {
        if (num == 0) {
            return "Zero";
        } else {
            return helper(num).substring(1);
        }
    }
public String helper(int num) {
        String result = "";
        if (num / 1000000000 > 0) {
            result += helper(num / 1000000000) + getWord(0)
                    + getWord(1000000000) + helper(num % 1000000000);
        } else if (num / 1000000 > 0) {
            result += helper(num / 1000000) + getWord(0) + getWord(1000000)
                    + helper(num % 1000000);
        } else if (num / 1000 > 0) {
            result += helper(num / 1000) + getWord(0) + getWord(1000)
                    + helper(num % 1000);
        } else if (num / 100 > 0) {
            result += getWord(0) + getWord(num / 100) + getWord(0)
                    + getWord(100) + helper(num % 100);
        } else if (num >= 20) {
            result += getWord(0) + getWord((num / 10) * 10) + helper(num % 10);
        } else if (num > 0) {
            result += getWord(0) + getWord(num);
        } else {
            return "";
        }
        return result;
    }
public String getWord(int num) {
        switch (num) {
        case 0:
            return " ";
        case 1:
            return "One";
        case 2:
            return "Two";
        case 3:
            return "Three";
        case 4:
            return "Four";
        case 5:
            return "Five";
        case 6:
            return "Six";
        case 7:
            return "Seven";
        case 8:
            return "Eight";
        case 9:
            return "Nine";
        case 10:
            return "Ten";
        case 11:
            return "Eleven";
        case 12:
            return "Twelve";
        case 13:
            return "Thirteen";
        case 14:
            return "Fourteen";
        case 15:
            return "Fifteen";
        case 16:
            return "Sixteen";
        case 17:
            return "Seventeen";
        case 18:
            return "Eighteen";
        case 19:
            return "Nineteen";
        case 20:
            return "Twenty";
        case 30:
            return "Thirty";
        case 40:
            return "Forty";
        case 50:
            return "Fifty";
        case 60:
            return "Sixty";
        case 70:
            return "Seventy";
        case 80:
            return "Eighty";
        case 90:
            return "Ninety";
        case 100:
            return "Hundred";
        case 1000:
            return "Thousand";
        case 1000000:
            return "Million";
        case 1000000000:
            return "Billion";
        default:
            return " ";
        }
    }

上述代码 Run Time 是 3ms。


solution 2

从小到大。

private String[] units = { "", "Thousand", "Million", "Billion" };
public String numberToWords2(int num) {
        if (num == 0) {
            return "Zero";
        }
        String result = "";
        int i = 0;
        while (num > 0) {
            if (num % 1000 > 0) {
                result = helper2(num % 1000) + units[i] + getWord(0) + result;
            }
            num /= 1000;
            i++;
        }
        return result.trim();
    }
/**
     * 
     * @param num
     * @return
     */
    public String helper2(int num) {
        if (num >= 100) {
            return getWord(num / 100) + getWord(0) + getWord(100) + getWord(0)
                    + helper2(num % 100);
        } else if (num > 20) {
            return getWord((num / 10) * 10) + getWord(0) + helper2(num % 10);
        } else if (num > 0) {
            return getWord(num) + getWord(0);
        } else if (num == 0) {
            return "";
        }
        return "";
    }

上述代码 Run Time 是 4ms。


bingo~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值