思路: 这题思路很简单,就是数字转文字,每三个数字为一组。刚看到这题的发现是hard,以为很难,但是想了想,做法很简单,也很容易想到。后来在做的时候才发现这道题的真谛是什么,eage case的处理,我写代码写了半小时,debug花了半个多小时。后来发现几乎都是eage case的问题。这侧面也体现了我逻辑并不严谨。这道题这么多test case,就是为了考察我们大家考虑地是否周到,很明显我并没有考虑地很周全。下面就展示一下代码:
class Solution {
public String numberToWords(int num) {
if(num == 0){return "Zero";}
int[] array = new int[4];
array[0] = num / 1000000000;
array[1] = num / 1000000 % 1000;
array[2] = num / 1000 %1000;
array[3] = num % 1000;
Map<Integer,String> mappings = new HashMap<>();
mappings.put(0,"Billion");
mappings.put(1,"Million");
mappings.put(2,"Thousand");
mappings.put(3,"");
Map<Character,String> sigleMappings = new HashMap<>();
sigleMappings.put('1',"One");
sigleMappings.put('2',"Two");
sigleMappings.put('3',"Three");
sigleMappings.put('4',"Four");
sigleMappings.put('5',"Five");
sigleMappings.put('6',"Six");
sigleMappings.put('7',"Seven");
sigleMappings.put('8',"Eight");
sigleMappings.put('9',"Nine");
Map doubleMappings = new HashMap();
doubleMappings.put('1',"Ten");
doubleMappings.put('2',"Twenty");
doubleMappings.put('3',"Thirty");
doubleMappings.put('4',"Forty");
doubleMappings.put('5',"Fifty");
doubleMappings.put('6',"Sixty");
doubleMappings.put('7',"Seventy");
doubleMappings.put('8',"Eighty");
doubleMappings.put('9',"Ninety");
doubleMappings.put("10","Ten");
doubleMappings.put("11","Eleven");
doubleMappings.put("12","Twelve");
doubleMappings.put("13","Thirteen");
doubleMappings.put("14","Fourteen");
doubleMappings.put("15","Fifteen");
doubleMappings.put("16","Sixteen");
doubleMappings.put("17","Seventeen");
doubleMappings.put("18","Eighteen");
doubleMappings.put("19","Nineteen");
String res = "";
for(int i = 0; i < 4; i++){
if(array[i] == 0){continue;}
else{
String ss = String.valueOf(array[i]);
if(ss.length() == 1){
res += sigleMappings.get(ss.charAt(0)) + " " + mappings.get(i) + " ";
}else if(ss.length() == 2){
if(ss.charAt(0) == '1'){res += doubleMappings.get(ss)+ " " + mappings.get(i) + " ";}
else if(ss.charAt(1) == '0'){res += doubleMappings.get(ss.charAt(0))+ " "+mappings.get(i)+ " ";}
else{res += doubleMappings.get(ss.charAt(0))+ " " + sigleMappings.get(ss.charAt(1)) +" "+ mappings.get(i)+ " ";}
}else{
if(ss.charAt(1) == '0' && ss.charAt(2) == '0'){
res += sigleMappings.get(ss.charAt(0))+ " " + "Hundred" + " "+mappings.get(i) + " ";
}else if(ss.charAt(2) == '0'){
res += sigleMappings.get(ss.charAt(0))+ " " + "Hundred" +" "+ doubleMappings.get(ss.charAt(1))+" " + mappings.get(i)+" ";
}else if(ss.charAt(1) == '0' ){
res += sigleMappings.get(ss.charAt(0)) + " "+ "Hundred" +" "+ sigleMappings.get(ss.charAt(2)) +" "+ mappings.get(i)+ " ";
}else if(ss.charAt(1) == '1'){
res += sigleMappings.get(ss.charAt(0)) +" "+ "Hundred" +" "+ doubleMappings.get(ss.substring(1)) + " " + mappings.get(i) + " ";
}else{
res += sigleMappings.get(ss.charAt(0)) +" "+ "Hundred" +" "+ doubleMappings.get(ss.charAt(1)) +" "+ sigleMappings.get(ss.charAt(2)) +" "+ mappings.get(i)+" ";
}
}
}
}
res = res.trim();
return res;
}
}
总结:
- 要严谨!