文章目录
1. 题目
2. 思路
(1) HashMap
- 利用HashMap存储所有可能出现的单词,然后进行拼接即可。
3. 代码
import java.util.HashMap;
import java.util.linkedList;
import java.util.List;
import java.util.Map;
public class Test {
public static void main(String[] args) {
}
}
class Solution {
private Map map1 = new HashMap() {{
put(0, "");
put(1, "One");
put(2, "Two");
put(3, "Three");
put(4, "Four");
put(5, "Five");
put(6, "Six");
put(7, "Seven");
put(8, "Eight");
put(9, "Nine");
put(10, "Ten");
put(11, "Eleven");
put(12, "Twelve");
put(13, "Thirteen");
put(14, "Fourteen");
put(15, "Fifteen");
put(16, "Sixteen");
put(17, "Seventeen");
put(18, "Eighteen");
put(19, "Nineteen");
}};
private Map map2 = new HashMap() {{
put(0, "");
put(2, "Twenty");
put(3, "Thirty");
put(4, "Forty");
put(5, "Fifty");
put(6, "Sixty");
put(7, "Seventy");
put(8, "Eighty");
put(9, "Ninety");
}};
public String numberToWords(int num) {
if (num == 0) {
return "Zero";
}
List val = new linkedList<>();
while (num > 0) {
val.add(num % 1000);
num /= 1000;
}
StringBuilder res = new StringBuilder();
int index = val.size() - 1;
if (index == 3) {
res.append(numToWords(val.get(index)));
res.append(" Billion");
index--;
if (val.get(index) != 0) {
res.append(" ");
res.append(numToWords(val.get(index)));
res.append(" Million");
}
index--;
if (val.get(index) != 0) {
res.append(" ");
res.append(numToWords(val.get(index)));
res.append(" Thousand");
}
index--;
if (val.get(index) != 0) {
res.append(" ");
res.append(numToWords(val.get(index)));
}
return res.toString();
}
if (index == 2) {
res.append(numToWords(val.get(index)));
res.append(" Million");
index--;
if (val.get(index) != 0) {
res.append(" ");
res.append(numToWords(val.get(index)));
res.append(" Thousand");
}
index--;
if (val.get(index) != 0) {
res.append(" ");
res.append(numToWords(val.get(index)));
}
return res.toString();
}
if (index == 1) {
res.append(numToWords(val.get(index)));
res.append(" Thousand");
index--;
if (val.get(index) != 0) {
res.append(" ");
res.append(numToWords(val.get(index)));
}
return res.toString();
}
if (index == 0) {
res.append(numToWords(val.get(index)));
}
return res.toString();
}
private String numToWords(int num) {
StringBuilder res = new StringBuilder();
int hun = num / 100;
if (hun > 0) {
res.append(map1.get(hun));
res.append(" Hundred ");
}
num %= 100;
if (num == 0) {
return res.substring(0, res.length() - 1);
}
if (num < 20) {
res.append(map1.get(num));
return res.toString();
}
int dec = num / 10;
res.append(map2.get(dec));
res.append(" ");
num %= 10;
if (num == 0) {
return res.substring(0, res.length() - 1);
}
res.append(map1.get(num));
return res.toString();
}
}