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 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”
Explain
성형 숫자 를 영어 단어 로 바꾸다.영어 단 어 는 숫자 가 모두 세 분 한 조 임 을 나타 낸다.
Thousand - Million - Billion 。
사고방식 은 1-19,20,30,40,50,60,70,80,90,100,1000,1000000,100000000 에 대응 하 는 영어 단 어 를 미리 표시 하 는 것 이다.그리고 통합.
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 "";
    }

상기 코드 런 타임 은 4ms 입 니 다.
bingo~~

좋은 웹페이지 즐겨찾기