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:
Hard code English words into three arrays.
If a number is less than 20, it can be represented only use array belowTwenty.
If a number is less than 100, we need to use array belowHundred to present tens and use belowTwenty to present single digit.
If a number is less than 1,000, we need belowTwenty to present number of Hundred and the rest can be presented using the above methods.
If a number is larger, we iteratively present its "Thousand", "Million", or "Billion".
Code:
public class Solution { private final String[] belowTwenty = {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"}; private final String[] belowHundred = {"", "Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"}; public String numberToWords(int num) { if (num == 0) { return "Zero"; } return helper(num); } public String helper(int num) { String result; if (num < 20) { result = belowTwenty[num]; } else if (num < 100) { result = belowHundred[num / 10] + " " + helper(num % 10); } else if (num < 1000) { result = helper(num / 100) + " Hundred " + helper(num % 100); } else if (num < 1000000) { result = helper(num / 1000) + " Thousand " + helper(num % 1000); } else if (num < 1000000000) { result = helper(num / 1000000) + " Million " + helper(num % 1000000); } else { result = helper(num / 1000000000) + " Billion " + helper(num % 1000000000); } return result.trim(); } }