题目描述
将非负整数转换为其对应的英文表示。可以保证给定输入小于 231 - 1 。
示例 1:
输入: 123
输出: “One Hundred Twenty Three”
示例 2:
输入: 12345
输出: “Twelve Thousand Three Hundred Forty Five”
示例 3:
输入: 1234567
输出: “One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven”
示例 4:
输入: 1234567891
输出: “One Billion Two Hundred Thirty Four Million Five Hundred Sixty Seven Thousand Eight Hundred Ninety One”
思路
每三位分成一组,用辅助方法lessHundred来处理每一组的数据。
class Solution {
private final String[] THOUSAND = {"", "Thousand", "Million", "Billion"};
private final String[] TWENTY = {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"};
private final String[] HUNDRED = {"", "", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};
public String numberToWords(int num) {
if(num == 0) return "Zero";
StringBuilder res = new StringBuilder();
int index = 0;
while(num > 0){
StringBuilder tem = new StringBuilder();
if(num%1000 != 0){
lessHundred(num%1000,tem);
res.insert(0,tem.append(THOUSAND[index]).append(" "));
}
num = num/1000;
index++;
}
return res.toString().trim();
}
public void lessHundred(int num,StringBuilder tem){
if(num == 0) return;
if(num < 20){
tem.append(TWENTY[num]).append(" ");
}else if(num < 100){
tem.append(HUNDRED[num/10]).append(" ");
lessHundred(num%10,tem);
}else if(num < 1000){
tem.append(TWENTY[num/100]).append(" ").append("Hundred").append(" ");
lessHundred(num%100,tem);
}
}
}