题目描述:
Convert a non-negative integer to its english words representation. Given input is guaranteed to be less than 231 - 1.
For example,
123 -> "One Hundred Twenty Three" 12345 -> "Twelve Thousand Three Hundred Forty Five" 1234567 -> "One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"
这个题难度没啥难度,就是考细节,各种空格问题。
public class Solution {
public String numberToWords(int num) {
if(num==0)
return "Zero";
StringBuilder sb=new StringBuilder();
String str=String.valueOf(num);
int n=0;
while(num>0){
n++;
num/=10;
}
int[] a=new int[(n-1)/3+1];
int firstLen=(n-1)%3+1;
a[0]=Integer.parseInt(str.substring(0, firstLen));
for(int i=1;i<a.length;i++){
a[i]=Integer.parseInt(str.substring(firstLen, firstLen+3));
firstLen+=3;
}
for(int i=0;i<a.length;i++){
sb.insert(0, getNumberStr(a[a.length-1-i],i,a.length));
}
return sb.toString();
}
public String getNumberStr(int num, int k ,int len) {
String[] strs1=new String[]{"One","Two","Three","Four","Five","Six","Seven","Eight","Nine"};
String[] strs2=new String[]{"Ten","Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen","Seventeen","Eighteen","Nineteen"};
String[] strs3=new String[]{"Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety"};
StringBuilder sb=new StringBuilder();
//当num==0时直接返回""
if(num==0)
return sb.toString();
//第一个三位数分组前面没有空格,后面的三位数分组前面有空格
if(k<len-1)
sb.append(" ");
int hundred =num/100;
if(hundred>0) {
sb.append(strs1[hundred-1]).append(" Hundred");
if(num%100!=0)
sb.append(" ");
}
int ten =num/10%10;
//十位数分三种情况讨论
if(ten==0){
int one=num%10;
if(one>0)
sb.append(strs1[num%10-1]);
}
if(ten==1){
sb.append(strs2[num%10]);
}
if(ten>1){
sb.append(strs3[ten-2]);
int one=num%10;
if(one!=0)
sb.append(" "+strs1[num%10-1]);
}
switch (k) {
case 1:
sb.append(" Thousand");
break;
case 2:
sb.append(" Million");
break;
case 3:
sb.append(" Billion");
break;
default:
break;
}
return sb.toString();
}
}