273. Integer to English Words
09/16/2021

Basic Idea
这题非常无聊,唯一能注意的技巧就是按照每三位分成一组,然后分别处理。另外就是可以先将要用到的字符串存起来。
Java Code
class Solution {
String[] s19 = new String[] {
"One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight",
"Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen",
"Sixteen", "Seventeen", "Eighteen", "Nineteen"
};
String[] s20 = new String[] {
"Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"
};
String s100 = "Hundred";
String[] s1000 = new String[] {
"Thousand", "Million", "Billion"
};
public String numberToWords(int num) {
if (num == 0) {
return "Zero";
}
List<String> res = new ArrayList<>();
int k = 0;
while (num > 0) {
int curr = num % 1000;
String part = partToWords(curr);
if (k > 0 && part.length() != 0) {
part = part + " " + s1000[k - 1];
}
if (part.length() > 0) {
res.add(part);
}
num /= 1000;
k++;
}
StringBuilder sb = new StringBuilder();
for (int i = res.size() - 1; i >= 0; --i) {
sb.append(res.get(i));
sb.append(" ");
}
return sb.toString().trim();
}
private String partToWords(int num) {
String ret = "";
if (num >= 100) {
ret += s19[num / 100 - 1] + " " + s100;
}
if (num % 100 != 0) {
if (num % 100 < 20) {
ret += " " + s19[num % 100 - 1];
} else {
ret += " " + s20[(num % 100) / 10 - 2];
if (num % 10 > 0) {
ret += " " + s19[num % 10 - 1];
}
}
}
ret = ret.trim();
return ret;
}
}
Last updated