From c91899827b7d796a31d0eb68a54fc2ddc224d56d Mon Sep 17 00:00:00 2001 From: bumpsoo Date: Wed, 7 Aug 2024 20:56:00 +0900 Subject: [PATCH] https://leetcode.com/problems/integer-to-english-words --- hard/integer_to_english_words.py | 33 ++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 hard/integer_to_english_words.py diff --git a/hard/integer_to_english_words.py b/hard/integer_to_english_words.py new file mode 100644 index 0000000..81ecb66 --- /dev/null +++ b/hard/integer_to_english_words.py @@ -0,0 +1,33 @@ +# https://leetcode.com/problems/integer-to-english-words +LOCALE = ['Zero', 'One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten', 'Eleven', 'Twelve', 'Thirteen', 'Fourteen', 'Fifteen', 'Sixteen', 'Seventeen', 'Eighteen', 'Nineteen'] +LOCALE_TEN = ['empty', 'empty', 'Twenty', 'Thirty', 'Forty', 'Fifty', 'Sixty', 'Seventy', 'Eighty', 'Ninety'] +HUNDRED = 'Hundred' +LOCALE_UNIT = ['Thousand', 'Million', 'Billion', 'Trillion'] +UNIT = 1000 +class Solution: + def numberToWords(self, num: int) -> str: + stack = [] + while num >= UNIT: + stack.append(num % UNIT) + num //= UNIT + stack.append(num % UNIT) + result = [] + def translate(val: int): + if val == 0: + result.append(LOCALE[val]) + return + if val >= 100: + result.append(LOCALE[val // 100]) + result.append(HUNDRED) + val %= 100 + if val >= 20: + result.append(LOCALE_TEN[val // 10]) + val -= (val // 10) * 10 + if val == 0: + return + result.append(LOCALE[val]) + while len(stack) > 0: + translate(stack.pop()) + if len(stack) > 0: + result.append(LOCALE_UNIT[len(stack) - 1]) + return ' '.join(result)