题意:给定一个数,把他用英文表示
思路:具体可见代码注释
思想:字符串的处理
复杂度:时间O(n),空间O(n)
class Solution {
String[] v1 = {"","Thousand", "Million", "Billion"};
String[] v2 = {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"};
String[] v3 = {"", "", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};
public String numberToWords(int num) {
// num为0
if(num == 0)
return "Zero";
String res = "";
int i = 0;
// 每次取末尾的3位数,直到num为0
while(num > 0) {
int cur = num % 1000;
num /= 1000;
// 末尾的3位数不为0
if(cur != 0) {
res = get(cur) + " " + v1[i] + " " + res;
}
i++;
}
// 结果去除空格
return res.trim();
}
// 生成
String get(int cur) {
// 获取百位,十位和个位的数字
int n1 = cur % 10;
int n2 = cur / 10 % 10;
int n3 = cur /100 % 10;
String temp = "";
// 百位不为0
if(n3 != 0) {
temp += v2[n3] + " " + "Hundred";
}
// 十位为0
if(n2 != 0) {
// 十位如果是1
if(n2 == 1) {
temp = temp + " " + v2[cur%100];
return temp.trim();
}
temp = temp + " " + v3[n2];
}
// 个位不为0
if(n1 != 0) {
temp = temp + " " + v2[n1];
}
// 结果去除空格
return temp.trim();
}
}
网友评论