# Leetcode Integer to English Words problem solution

In this Leetcode Integer to English Words problem solution we need to Convert a non-negative integer num to its English words representation.

## Problem solution in Python.

```class Solution:
def numberToWords(self, num: int) -> str:
self.lessThan20 = ["", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"]
self.tens = ["", "", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"]
self.thousands = ["", "Thousand", "Million", "Billion"];
if num == 0 :
return "Zero"
res = ''
i = 0
while num>0:
if num%1000 != 0:
res = self.helper(num%1000) + self.thousands[i] + " " + res
num //= 1000
i += 1
return res.strip()

def helper(self, num):
if num == 0:
return ""
if num < 20:
return self.lessThan20[num] + " "
if num < 100:
return self.tens[num//10] + " " + self.helper(num%10)
if num < 1000:
return self.lessThan20[num//100] + " Hundred " + self.helper(num%100)
```

## Problem solution in Java.

```class Solution {
static HashMap<Integer,String> hm;
public static void fill() {
hm = new HashMap<Integer, String>();
hm.put(1_000_000_000,"Billion");
hm.put(1_000_000,"Million");
hm.put(1_000,"Thousand");
hm.put(100, "Hundred");
}
static String ten[] = {"","One","Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten","Eleven","Twelve",
"Thirteen","Fourteen","Fifteen","Sixteen","Seventeen","Eighteen","Nineteen"};
static String two[] = {"","","Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety"};
public static String numberToWords(int n) {
if(n<1)
return "Zero";
fill();
int base = 1_000_000_000;
StringBuilder sb = new StringBuilder();
while(n>0&&base>1) {
if(n>=base) {
int val = n/base;
sb.append(get(val));
sb.append(hm.get(base)+" ");
n%=base;
}
base/=1000;
}
sb.append(get(n));
sb.deleteCharAt(sb.length()-1);
return sb.toString();
}
public static String get(int n) {
StringBuilder sb = new StringBuilder();
while(n>0) {
if(n>=100) {
int val=n/100;
sb.append(ten[val]+" ");
sb.append(hm.get(100)+" ");
n%=100;
}
else if(n>=20) {
int val = n/10;
sb.append(two[val]+" ");
n%=10;
}
else if(n<20) {
sb.append(ten[n]+" ");
n=0;
}
}
return sb.toString();
}
}
```

## Problem solution in C++.

```class Solution {
public:
string hundredStr(int num){
vector<string> arr1={"","One","Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten",
"Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen","Seventeen","Eighteen","Nineteen"};
vector<string> arr2={"","","Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety"};
string ret;
ret=num%100<20?arr1[num%100]:arr2[(num%100)/10]+(num%10?" "+arr1[num%10]:"");
if(num>99)ret=arr1[num/100]+" Hundred"+(num%100?" "+ret:"");
return ret;
}
string numberToWords(int num) {
string ret;
vector<string> strarr={"Thousand","Million","Billion"};
ret=hundredStr(num%1000);
for(int i=0;i<3;i++){
num/=1000;
ret=num%1000?hundredStr(num%1000)+" "+strarr[i]+" "+ ret:ret;
}
while(ret.back()==' ')ret.pop_back();
return ret.empty()?"Zero":ret;
}
};
```