`

Leetcode - Integer to English Words

 
阅读更多
[分析]
这题通过率之所以非常低是因为有很多corner case,代码写得不好时就很容易在各种corner case上刷跟头,第二十遍才被Accept,自己还真是有耐心。然后看到讨论区中的解答,一对比,差距啊,努力努力再努力!
注意:不需要添加“and”
大神漂亮的作品:
https://leetcode.com/discuss/55462/my-clean-java-solution-very-easy-to-understand

public class Solution {
    public String numberToWords(int num) {
        if (num == 0) return "Zero";
        StringBuilder result = new StringBuilder();
        boolean hasBillion = false;
        boolean hasMillion = false;
        boolean hasThousand = false;
        if (num >= 1000000000) {
            hasBillion = true;
            result.append(digits[num / 1000000000]).append(' ').append("Billion").append(' ');
            num %= 1000000000;
        }
        if (num >= 1000000) {
            hasMillion = true;
            result.append(readALessThousandNum(String.valueOf(num / 1000000), false)).append(' ').append("Million").append(' ');
            num %= 1000000;
        } /*else if (hasBillion && num > 0) {
            result.append("and").append(' ');
        }*/
        if (num >= 1000) {
            hasThousand = true;
            result.append(readALessThousandNum(String.valueOf(num / 1000), false)).append(' ').append("Thousand").append(' ');
            num %= 1000;
        } /*else if (hasMillion && num > 0) {
            result.append("and").append(' ');
        }*/
        result.append(readALessThousandNum(String.valueOf(num), hasThousand));
        return result.toString().trim();
    }
    private String[] digits = {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};
    private String[] tenx = {"Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", 
        "Fifteen", "Sixteen", "Seventeen","Eighteen", "Nineteen"
    };
    private String[] tens = {"","","Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};
    public String readALessThousandNum(String num, boolean hasThousand) {
        if (num.length() == 1)
            num = "00" + num;
        else if (num.length() == 2)
            num = "0" + num;
        StringBuilder result = new StringBuilder();
        boolean hasHundred = false;
        if (num.charAt(0) != '0') {
            hasHundred = true;
            result.append(digits[num.charAt(0) - '0']).append(' ').append("Hundred").append(' ');
        } /*else if (hasThousand && (num.charAt(1) != '0'|| num.charAt(0) != '0')) {
            result.append("and");
        }*/
        if (num.charAt(1) == '0' && num.charAt(2) != '0') {
            // if ((hasHundred || hasThousand))
            //     result.append("and").append(' ');
            result.append(digits[num.charAt(2) - '0']).append(' ');
        } else if (num.charAt(1) == '1') {
            // if (hasHundred || hasThousand)
            //     result.append("and").append(' ');
            result.append(tenx[num.charAt(2) - '0']).append(' ');
        } else {
            result.append(tens[num.charAt(1) - '0']).append(' ');
            if (num.charAt(2) != '0')
                result.append(digits[num.charAt(2) - '0']).append(' ');
        }
        return result.toString().trim();
    }
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics