一、題目名稱java
Integer to English Words(按英語讀法輸出數字對應單詞)less
二、題目地址code
https://leetcode.com/problems/integer-to-english-words/leetcode
三、題目內容開發
英文:Convert a non-negative integer to its english words representation. Given input is guaranteed to be less than 231 - 1.get
中文:給出一個非負整數,輸出該數字在英語對應的單詞,數字小於2^31-1input
例如:下面是三個轉換的例子it
123 -> "One Hundred Twenty Three" 12345 -> "Twelve Thousand Three Hundred Forty Five" 1234567 -> "One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"
四、解題方法io
其實一開始我把題目想複雜了。這道題不用考慮英語中隔位要寫「And」的狀況。如101,在英語中的念法爲「One Hundred And One」,在這道題中,只須要輸出「One Hundred One」就能夠了。所以,要AC本題只須要將對應位置的數字和數位寫對。Java代碼以下:event
/** * @功能說明:LeetCode 273 - Integer to English Words * @開發人員:Tsybius2014 * @開發時間:2015年10月12日 */ public class Solution { /** * 按英語讀法輸出阿拉伯數字對應單詞 * @param num 數字,範圍:[0,2^31-1] * @return */ public String numberToWords(int num) { if (num < 0) { return ""; } //數字爲0直接返回 if (num == 0) { return "Zero"; } //左起段落 int segment1 = num / 1000000000; //段落1:十億位-千億位 int segment2 = num % 1000000000 / 1000000; //段落2:百萬位-億位 int segment3 = num % 1000000 / 1000; //段落3:千位-十萬位 int segment4 = num % 1000; //段落4:個位-百位 String result = ""; if (segment1 > 0) { result += numToWordsLessThan1000(segment1) + " " + "Billion"; } if (segment2 > 0) { result += numToWordsLessThan1000(segment2) + " " + "Million"; } if (segment3 > 0) { result += numToWordsLessThan1000(segment3) + " " + "Thousand"; } if (segment4 > 0) { result += numToWordsLessThan1000(segment4); } return result.trim(); } /** * 按英語讀法輸出阿拉伯數字對應單詞 * @param num 數字,範圍:(0,1000) * @return */ private String numToWordsLessThan1000(int num) { if (num == 0 || num >= 1000) { return ""; } String result = ""; if (num >= 100) { result += numToWordsBase(num / 100) + " " + "Hundred"; } num = num % 100; if (num > 20) { result += numToWordsBase(num / 10 * 10); if (num % 10 != 0) { result += numToWordsBase(num % 10); } } else if (num > 0) { result += numToWordsBase(num); } return result; } /** * 按英語讀法輸出阿拉伯數字對應單詞 * @param num 數字,範圍:(0,20)∪{30,40,50,60,70,80,90} * @return */ private String numToWordsBase(int num) { String result = " "; switch (num) { case 1: result += "One"; break; case 2: result += "Two"; break; case 3: result += "Three"; break; case 4: result += "Four"; break; case 5: result += "Five"; break; case 6: result += "Six"; break; case 7: result += "Seven"; break; case 8: result += "Eight"; break; case 9: result += "Nine"; break; case 10: result += "Ten"; break; case 11: result += "Eleven"; break; case 12: result += "Twelve"; break; case 13: result += "Thirteen"; break; case 14: result += "Fourteen"; break; case 15: result += "Fifteen"; break; case 16: result += "Sixteen"; break; case 17: result += "Seventeen"; break; case 18: result += "Eighteen"; break; case 19: result += "Nineteen"; break; case 20: result += "Twenty"; break; case 30: result += "Thirty"; break; case 40: result += "Forty"; break; case 50: result += "Fifty"; break; case 60: result += "Sixty"; break; case 70: result += "Seventy"; break; case 80: result += "Eighty"; break; case 90: result += "Ninety"; break; } return result; } }
END