Monday, September 25, 2017

273. Integer to English Words

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"
Solution:
The method is very straightforward, nothing special.
Couple tips:
1. Compose the string for every 3 digits.
2. Add white space to the end of returned string for <=3 digit number, so we should be able to concatenate with thousands without manually adding whitespace before thousands. Any unwanted whtiespaces that are at the end will be trimmed before return.


 private final String[] LESS_THAN_20 = {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"};  
 private final String[] TENS = {"", "Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};  
 private final String[] THOUSANDS = {"", "Thousand", "Million", "Billion"};  
   public String numberToWords(int num) {  
     if(num==0) return "Zero";  
     int i=0;  
     String res="";  
     while(num!=0){  
       if(num%1000!=0){  
         res=helper(num%1000)+THOUSANDS[i]+" "+res;  
       }  
       num=num/1000;  
       i++;  
     }  
     return res.trim();  
   }  
   public String helper(int num){  
     if(num==0) return "";  
     if(num>=100) return LESS_THAN_20[num/100]+" Hundred "+helper(num%100);  
     if(num>=20) return TENS[num/10]+" "+helper(num%10);  
     else return LESS_THAN_20[num]+" ";  
   }  

No comments:

Post a Comment