遞迴應用: 把 數字 轉成 英文表示法 Integer to English Words_Leetcode #273

更新於 2024/08/07閱讀時間約 4 分鐘

題目敘述 Integer to English Words

給定一個整數num

請轉換成對應的的英文數字表達(One, Two, Three, ... 那種數字表達式)


測試範例:

Example 1:

Input: num = 123
Output: "One Hundred Twenty Three"

Example 2:

Input: num = 12345
Output: "Twelve Thousand Three Hundred Forty Five"

Example 3:

Input: num = 1234567
Output: "One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"
 

約束條件

Constraints:

  • 0 <= num <= 2^31 - 1

輸入的整數是32bit整數範圍內


觀察 英文數字表達式的範圍

大方向是3位數一組,區分為 千Thousand、百萬Million、十億Billion

對應到10^3, 10^6, 10^9


小細節是未滿20的小數字,英文有專門一一對應的稱呼

1 One

2 Two

3 Three

...

10 Ten

11 Eleven

12 Twelve

...

19 Nineteen


另外,20, 30, 40, ..., 90 有各自的稱呼

20 Twenty

30 Thirty

40 Forty

...

90 Ninety


演算法 遞迴分解


承接觀察點的思考

逢三位數分解一次,對應到千Thousand百萬Million十億Billion。

接著特別針對小區間1~19 還有 20, 30, 40, ..., 90 的數字進行特別處理


從高位數往低位數分解,找到對應的英文單字,分解到零的時候,整個轉換過程結束。


程式碼 遞迴分解

class Solution:
def numberToWords(self, num):

small_number = '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 small_number[n-1:n]

elif n < 100:
return [ tens[n//10 - 2] ] + words(n%10)

elif n < 1000:
return [ small_number[n//100-1] ] + ['Hundred'] + words(n%100)

else:
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'

複雜度分析

時間複雜度: O(log n)

整數n用十進位表達,最多需要log10 n個數字,至多log n回合可以轉換完畢。


空間複雜度: O(log n)

整數n用十進位表達,最多需要log10 n個數字,至多log n回合可以轉換完畢。

遞迴深度最深為O( log n)


Reference

[1] Integer to English Words - LeetCode

avatar-img
90會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
題目敘述: Minimum Cost to Convert String I 給定字元轉換映射表original, changes和對硬的成本陣列cost。 請問字串source轉換到字串destination的最小成本是多少? 如果無解,請返回-1 如果有解,請返回整體的轉換最小成本。
給定一個輸入陣列,每一個tuple代表節點之間了從屬關係。 請從從屬關係重建整顆二元樹,並且返回整顆二元樹的根結點。
題目敘述 Merge Nodes in Between Zeros 給定一個鏈結串列,合併非零區間的節點(以加總的方式合併),輸出合併後的鏈結串列。
題目敘述 All Ancestors of a Node in a Directed Acyclic Graph 給定一個有向無環圖,請找出每個點的祖先,以陣列的形式返回答案。
題目敘述 Binary Tree Maximum Path Sum 給定一個二元樹,請找出最大的區間路徑和是多少? 註: 區間路徑和 = 某個節點a -> 某個節點b的路徑節點值總和。
題目敘述 House Robber III 題目會給我們一個二元樹, 二元樹裡的每個節點分別代表每棟房屋的價值,也就是房屋內有的現金數量。 題目敘述給的情境是假想盜賊要偷東西,限制是上下相鄰樓層的兩棟房屋不能一起偷,只能選擇其中一棟,否則就會觸發警報器。 請問盜賊可以得手的最大金額是多少?
題目敘述: Minimum Cost to Convert String I 給定字元轉換映射表original, changes和對硬的成本陣列cost。 請問字串source轉換到字串destination的最小成本是多少? 如果無解,請返回-1 如果有解,請返回整體的轉換最小成本。
給定一個輸入陣列,每一個tuple代表節點之間了從屬關係。 請從從屬關係重建整顆二元樹,並且返回整顆二元樹的根結點。
題目敘述 Merge Nodes in Between Zeros 給定一個鏈結串列,合併非零區間的節點(以加總的方式合併),輸出合併後的鏈結串列。
題目敘述 All Ancestors of a Node in a Directed Acyclic Graph 給定一個有向無環圖,請找出每個點的祖先,以陣列的形式返回答案。
題目敘述 Binary Tree Maximum Path Sum 給定一個二元樹,請找出最大的區間路徑和是多少? 註: 區間路徑和 = 某個節點a -> 某個節點b的路徑節點值總和。
題目敘述 House Robber III 題目會給我們一個二元樹, 二元樹裡的每個節點分別代表每棟房屋的價值,也就是房屋內有的現金數量。 題目敘述給的情境是假想盜賊要偷東西,限制是上下相鄰樓層的兩棟房屋不能一起偷,只能選擇其中一棟,否則就會觸發警報器。 請問盜賊可以得手的最大金額是多少?
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
在職場或生活中,難免會遇到有人問你薪資、案子、獎金、年終等金錢相關的問題。這些問題往往讓人感到尷尬或不知所措,不知道該怎麼回答。如果回答得不好,可能會讓人覺得你小氣、不願意分享,甚至引起誤會。 學會如何高情商地回應金錢話題,就顯得非常重要。以下提供三種技巧,讓你在面對這些問題時,都能輕鬆應對。
Thumbnail
因果業報真實不虛 末學深信:惡有惡報,善有善報;不是不報,時候未到。某天晚上末學盥洗完,洗去一整天的塵垢之後,精神很好,整個人都神采奕奕。當自己正準備步出浴廁將頭髮吹乾時,末學突然感到肚子一陣抽痛,有點像是胃抽筋,痛到沒辦法站立,當下只能蹲縮在廁所,而且全身一直冒汗,從剛剛的神采奕奕已經變成全身濕
Thumbnail
人皆可殺笑道:「若非忌憚古樹母神的超凡靈力,本座又怎會讓你們先取得百歲花魂了?你是捕神?如果是的話,怎麼還不對我出手了?」 任飛猛地撲向人皆可殺,速度之快匪夷所思,正是絕技「神光一閃」。 人皆可殺知敵人撲到,忙伸手去擋,奇道:「大地還有這種輕功高手?」 任飛借力後退,穩穩立在人皆可殺面前,道:「既然
Thumbnail
前言 大家好,我是有朋 遊戲ID:Doggo 一轉眼劍盾的時代就來到最後一場大賽,很高興能在這場比賽中打出自己與寶可夢們的風采,順利奪下冠軍,也向大家展現了自己肉眼可見的進步。 雖然在劍盾發售一年多後才入坑,但不知不覺也打了五場的官方賽,能夠加入VGC這個大家庭,擁有這麼多前輩的指導與建議,真的太幸
Thumbnail
流行樂帶給人們什麼樣的記憶與時代意義?誰又能代表流行樂?也許我們能講出幾位在樂壇上足以代表某個時代的大哥大姊,然而隨著時間的遞進,加上快速流變的科技社會,似乎不到三、五年後浪便覆蓋掉主流,成為所謂新主流的趨勢,如今的主流似乎已不再明顯,百花齊放的音樂各自妖媚吸引著不同的聽眾前去採蜜。但偶而還是懷念,
一臉精神爽利的洛克,開著盛滿裝備的大卡車前往機場,副駕上的魯克看著上尉那張神采飛揚的臉。 魯克不自知地拍了一拍上司的肩膀:「聽說五六月的南極也是負攝氏度的。不過以你今天的狀況,應該可以把那裡的氣溫提升到正攝氏度。」 洛克瞅了魯克一眼:「絕對沒問題。」 大卡車停在安550機尾部的下面,比例像是一百比一
Thumbnail
應許之地:歐巴馬回憶錄 「我知道當我舉起右手宣誓成為美國總統的那一天,世界會以不同的眼光看待美國。」 對於領袖的憧憬,以及對領導力的興趣和熱愛,讓我始終對於「總統」對於領袖的憧憬,以及對領導力的興趣和熱愛,讓我始終對於「總統」這個職位有很大的想像,讓我們一起看看歐巴馬總統任內的故事。
Thumbnail
文章裡的留言,哪些該或不該回應?如何增加回應人數?本文會好好介紹。 方格子和許多平台一樣,讀者都可以在文章裡留言給作者,或是透過留言彼此討論和文章主題有關的延伸話題;而這是創作者用來逐步建立忠實讀者群的重要工具之一。 在「方格子創作成長學院」的這篇文章中,我們就來討論幾個和留言相關的話題。
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
在職場或生活中,難免會遇到有人問你薪資、案子、獎金、年終等金錢相關的問題。這些問題往往讓人感到尷尬或不知所措,不知道該怎麼回答。如果回答得不好,可能會讓人覺得你小氣、不願意分享,甚至引起誤會。 學會如何高情商地回應金錢話題,就顯得非常重要。以下提供三種技巧,讓你在面對這些問題時,都能輕鬆應對。
Thumbnail
因果業報真實不虛 末學深信:惡有惡報,善有善報;不是不報,時候未到。某天晚上末學盥洗完,洗去一整天的塵垢之後,精神很好,整個人都神采奕奕。當自己正準備步出浴廁將頭髮吹乾時,末學突然感到肚子一陣抽痛,有點像是胃抽筋,痛到沒辦法站立,當下只能蹲縮在廁所,而且全身一直冒汗,從剛剛的神采奕奕已經變成全身濕
Thumbnail
人皆可殺笑道:「若非忌憚古樹母神的超凡靈力,本座又怎會讓你們先取得百歲花魂了?你是捕神?如果是的話,怎麼還不對我出手了?」 任飛猛地撲向人皆可殺,速度之快匪夷所思,正是絕技「神光一閃」。 人皆可殺知敵人撲到,忙伸手去擋,奇道:「大地還有這種輕功高手?」 任飛借力後退,穩穩立在人皆可殺面前,道:「既然
Thumbnail
前言 大家好,我是有朋 遊戲ID:Doggo 一轉眼劍盾的時代就來到最後一場大賽,很高興能在這場比賽中打出自己與寶可夢們的風采,順利奪下冠軍,也向大家展現了自己肉眼可見的進步。 雖然在劍盾發售一年多後才入坑,但不知不覺也打了五場的官方賽,能夠加入VGC這個大家庭,擁有這麼多前輩的指導與建議,真的太幸
Thumbnail
流行樂帶給人們什麼樣的記憶與時代意義?誰又能代表流行樂?也許我們能講出幾位在樂壇上足以代表某個時代的大哥大姊,然而隨著時間的遞進,加上快速流變的科技社會,似乎不到三、五年後浪便覆蓋掉主流,成為所謂新主流的趨勢,如今的主流似乎已不再明顯,百花齊放的音樂各自妖媚吸引著不同的聽眾前去採蜜。但偶而還是懷念,
一臉精神爽利的洛克,開著盛滿裝備的大卡車前往機場,副駕上的魯克看著上尉那張神采飛揚的臉。 魯克不自知地拍了一拍上司的肩膀:「聽說五六月的南極也是負攝氏度的。不過以你今天的狀況,應該可以把那裡的氣溫提升到正攝氏度。」 洛克瞅了魯克一眼:「絕對沒問題。」 大卡車停在安550機尾部的下面,比例像是一百比一
Thumbnail
應許之地:歐巴馬回憶錄 「我知道當我舉起右手宣誓成為美國總統的那一天,世界會以不同的眼光看待美國。」 對於領袖的憧憬,以及對領導力的興趣和熱愛,讓我始終對於「總統」對於領袖的憧憬,以及對領導力的興趣和熱愛,讓我始終對於「總統」這個職位有很大的想像,讓我們一起看看歐巴馬總統任內的故事。
Thumbnail
文章裡的留言,哪些該或不該回應?如何增加回應人數?本文會好好介紹。 方格子和許多平台一樣,讀者都可以在文章裡留言給作者,或是透過留言彼此討論和文章主題有關的延伸話題;而這是創作者用來逐步建立忠實讀者群的重要工具之一。 在「方格子創作成長學院」的這篇文章中,我們就來討論幾個和留言相關的話題。