273. Integer to English Words
Convert a non-negative integer to its english words representation. Given input is guaranteed to be less than 231 - 1.
Example 1:
Input: 123
Output: "One Hundred Twenty Three"
Example 2:
Input: 12345
Output: "Twelve Thousand Three Hundred Forty Five"
Example 3:
Input: 1234567
Output: "One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"
Example 4:
Input: 1234567891
Output: "One Billion Two Hundred Thirty Four Million Five Hundred Sixty Seven Thousand Eight Hundred Ninety One"
My Solutions:
因为前20个数字是唯一的,所以必须单独处理。
注意最后要trim一下,去掉可能的空格。
class Solution {
public String numberToWords(int num) {
if(num == 0) return "Zero";
return helper(num);
}
public String helper(int num) {
String[] words = new String[] {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine",
"Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};
StringBuilder res = new StringBuilder();
if(num >= 1000000000) {
res.append(helper(num / 1000000000)).append(" Billion ").append(helper(num % 1000000000));
} else if(num >= 1000000) {
res.append(helper(num / 1000000)).append(" Million ").append(helper(num % 1000000));
} else if(num >= 1000) {
res.append(helper(num / 1000)).append(" Thousand ").append(helper(num % 1000));
} else if(num >= 100) {
res.append(helper(num / 100)).append(" Hundred ").append(helper(num % 100));
} else if(num >= 20) {
res.append(words[(num - 20) / 10 + 20]).append(" ").append(words[num % 10]);
} else {
res.append(words[num]);
}
return res.toString().trim();
}
}
Last updated