diff options
author | Jack Sangdahl <jack@pngu.org> | 2024-08-06 18:40:25 -0600 |
---|---|---|
committer | Jack Sangdahl <jack@pngu.org> | 2024-08-06 18:40:25 -0600 |
commit | fec032985abdf5c864ab35493678346f186f3630 (patch) | |
tree | 250d8431012f2ac90ebffb38949a23a24bf8cba1 /integer_english_words.py | |
parent | 76580bdd2b30e2c779e910c02bfc8960ec5c828c (diff) | |
download | leetcode-fec032985abdf5c864ab35493678346f186f3630.tar.gz leetcode-fec032985abdf5c864ab35493678346f186f3630.zip |
273. integer to english words
Diffstat (limited to 'integer_english_words.py')
-rw-r--r-- | integer_english_words.py | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/integer_english_words.py b/integer_english_words.py new file mode 100644 index 0000000..e8f817a --- /dev/null +++ b/integer_english_words.py @@ -0,0 +1,39 @@ +# 273. Integer to English Words + +""" +convert a non-negative integer 'num' to its english words represetation. +""" + + +class Solution(object): + def numberToWords(self, num): + """ + :type num: int + :rtype: str + """ + + below_twenty = ( + "One Two Three Four Five Six Seven Eight Nine Ten Eleven Twelve " + "Thirteen Fourteen Fifteen Sixteen Seventeen Eighteen Nineteen".split() + ) + tens = "Twenty Thirty Forty Fifty Sixty Seventy Eighty Ninety".split() + + def words(n): + if n < 20: + return below_twenty[n - 1 : n] + if n < 100: + return [tens[n / 10 - 2]] + words(n % 10) + if n < 1000: + return [below_twenty[n / 100 - 1]] + ["Hundred"] + words(n % 100) + for p, w in enumerate(("Thousand", "Million", "Billion"), 1): + if n < 1000 ** (p + 1): + return words(n / 1000**p) + [w] + words(n % 1000**p) + + return " ".join(words(num)) or "Zero" + + +if __name__ == "__main__": + obj = Solution() + print(obj.numberToWords(123)) + print(obj.numberToWords(12345)) + print(obj.numberToWords(1234567)) |