<p>Convert a non-negative integer <code>num</code> to its English words representation.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> num = 123
<strong>Output:</strong> &quot;One Hundred Twenty Three&quot;
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> num = 12345
<strong>Output:</strong> &quot;Twelve Thousand Three Hundred Forty Five&quot;
</pre>

<p><strong class="example">Example 3:</strong></p>

<pre>
<strong>Input:</strong> num = 1234567
<strong>Output:</strong> &quot;One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven&quot;
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>0 &lt;= num &lt;= 2<sup>31</sup> - 1</code></li>
</ul>

class Solution:
    def numberToWords(self, num: int) -> str:
        les20 = [
            "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten",
            "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"
        ]
        tens = ["Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"]

        
        def helper(num):
            if not num:
                return []
            elif 1 <= num < 20:
                return [les20[num - 1]] 
            elif 20 <= num < 100:
                return [tens[num // 10 - 2]] + helper(num % 10)
            elif 100 <= num < 1000:
                return helper(num // 100) + ["Hundred"] + helper(num % 100)
            else:
                for p, unit in enumerate(["Billion", "Million", "Thousand"]):
                    thres = 10 ** (3 * (3 - p))
                    if num >= thres:
                        return helper(num // thres) + [unit] + helper(num % thres)
        
        res = helper(num)

        return " ".join(res) if res else "Zero"
16600