應用題 從阿拉伯數字轉成羅馬數字 Leetcode 12: Integer to Roman

更新於 發佈於 閱讀時間約 4 分鐘

這題的題目在這裡:

題目會給定我們一組十進位表示法的阿拉伯數字,要求我們把它轉換為對應的羅馬數字。


測試範例

Example 1:

Input: num = 3
Output: "III"
Explanation: 3 is represented as 3 ones.

Example 2:

Input: num = 58
Output: "LVIII"
Explanation: L = 50, V = 5, III = 3.

Example 3:

Input: num = 1994
Output: "MCMXCIV"
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.



約束條件

Constraints:

  • 1 <= num <= 3999

演算法

把原本題目給的羅馬數字和十進位數字的關係建立成一張映射表(字典)。

Symbol       Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1000

把每一個羅馬數字由大到小排列,當作基底,做數字的轉換。

每一輪除法留下來的商數就是對應羅馬數字所需要的係數,餘數帶入下一輪轉換,一直反覆進行,直到個位數為止。


程式碼

class Solution:
 def intToRoman(self, num: int) -> str:
  
## dictionary:
# key: decimal value as base
# value: corresponding roman symbol
  mapping_table = {
       1000 : "M",
       900 : "CM",
       500 : "D",
       400 : "CD",
       100 : "C",
       90 : "XC",
       50 : "L",
       40 : "XL",
       10 : "X",
       9 : "IX",
       5 : "V",
       4 : "IV",
       1 : "I"
  }
  
  roman_string = ''
  
# represent input num in roman number system
  for base, roman_symbol in mapping_table.items():
   
# update roman string with corresponding roman symbol
   roman_string += (num // base) * roman_symbol
   
# update num as remainder
   num = num % base
  

  return roman_string



複雜度分析

時間複雜度: O( 1)
從左到右,每個羅馬數字對應的基底掃描過一遍。

空間複雜度: O(1)
都是臨時變數,所占用的記憶體空間為常數級別O(1)


關鍵知識點

想到用字典(雜湊映射表),去儲存每個羅馬數字和十進位表示裡面對應到的阿拉伯數字的映射關係。

​本題有一個對稱的兄弟姊妹題 Roman to Integer,可以互相做為學習、比較的參照。


Reference:

[1] Python/C++ by mapping and math [w/ Comment] - Integer to Roman - LeetCode

avatar-img
91會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
題目會給定我們一組羅馬數字,要求我們把它轉換為對應十進位表示法的阿拉伯數字。
題目會給我們一個山形的輸入陣列,和目標值target,要求我們找出目標值所在的陣列索引。如果出現兩次,返回比較小的那一個,也就是比較靠左的那個索引值。 山形的意思就是說,從最左側到山頂最大值都是遞增,從山頂最大值到右側都是遞減。
題目會給我們一組定義好的Stack 堆疊的介面,要求底層用兩個或一個Queue來實現。 也就是說,要求我們用一個或兩個FIFO的Queues去實作出一個LIFO的Stack
題目會給我們一組定義好的Queue 佇列的介面,要求底層用兩個stack來實現。 也就是說,要求我們用兩個LIFO的stacks去實作出一個FIFO的Queue
題目敘述 這題是一個經典的資料結構實作題,要求我們實作指定長度為k的環狀佇列。 請記得,佇列最重要的特質就是先進先出 First In First Out 又簡稱為 FIFO
題目會給定一個字串s,把裡面的星號*視為鍵盤上的backspace,往前(往左方)吃掉最靠近的字元。 請位最後全部操作完以後,剩下的字串內容為何? 例如: abc**,最後剩下a。 說明: bc分別被右邊的星號給吃掉。
題目會給定我們一組羅馬數字,要求我們把它轉換為對應十進位表示法的阿拉伯數字。
題目會給我們一個山形的輸入陣列,和目標值target,要求我們找出目標值所在的陣列索引。如果出現兩次,返回比較小的那一個,也就是比較靠左的那個索引值。 山形的意思就是說,從最左側到山頂最大值都是遞增,從山頂最大值到右側都是遞減。
題目會給我們一組定義好的Stack 堆疊的介面,要求底層用兩個或一個Queue來實現。 也就是說,要求我們用一個或兩個FIFO的Queues去實作出一個LIFO的Stack
題目會給我們一組定義好的Queue 佇列的介面,要求底層用兩個stack來實現。 也就是說,要求我們用兩個LIFO的stacks去實作出一個FIFO的Queue
題目敘述 這題是一個經典的資料結構實作題,要求我們實作指定長度為k的環狀佇列。 請記得,佇列最重要的特質就是先進先出 First In First Out 又簡稱為 FIFO
題目會給定一個字串s,把裡面的星號*視為鍵盤上的backspace,往前(往左方)吃掉最靠近的字元。 請位最後全部操作完以後,剩下的字串內容為何? 例如: abc**,最後剩下a。 說明: bc分別被右邊的星號給吃掉。
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
在這篇文章中,我們將深入剖析 LeetCode 題目 13. Roman to Integer 的解題方法。這是一道經典題目,要求我們將羅馬數字轉換為整數表示。通過學習這篇教學,你將掌握如何處理羅馬數字的規則和高效地實現轉換。
在這篇文章中,我們將探討 LeetCode 題目 12. Integer to Roman 的解題方法。這是一道經典的模擬題,要求我們將整數轉換為羅馬數字表示。通過這篇文章,你將學會如何高效地解決這道題,並理解羅馬數字的基本規則和轉換技巧。
Thumbnail
分享一個猜數字的遊戲題目,給予提示讓玩家找出正確的四位數密碼。
  也就是說,這個題目最主要要考的東西其實遠遠不是兩個三位數相加那麼簡單。它要測驗的核心其實是「學生是否有辦法把應用題轉譯為算式,並計算出正確答案」。當我們帶著這份思考去重新看那道題目時,我們會發現這個我們成年人沒有看懂的要求,不僅僅是要學生寫出計算過程,更核心的是在確認「解題過程」。
Thumbnail
今天想聊一組比較冷門的函式,ARABIC 跟 ROMAN 函式,它可以把羅馬數字轉跟阿拉伯數字互換,語法相當單純好學!
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
在這篇文章中,我們將深入剖析 LeetCode 題目 13. Roman to Integer 的解題方法。這是一道經典題目,要求我們將羅馬數字轉換為整數表示。通過學習這篇教學,你將掌握如何處理羅馬數字的規則和高效地實現轉換。
在這篇文章中,我們將探討 LeetCode 題目 12. Integer to Roman 的解題方法。這是一道經典的模擬題,要求我們將整數轉換為羅馬數字表示。通過這篇文章,你將學會如何高效地解決這道題,並理解羅馬數字的基本規則和轉換技巧。
Thumbnail
分享一個猜數字的遊戲題目,給予提示讓玩家找出正確的四位數密碼。
  也就是說,這個題目最主要要考的東西其實遠遠不是兩個三位數相加那麼簡單。它要測驗的核心其實是「學生是否有辦法把應用題轉譯為算式,並計算出正確答案」。當我們帶著這份思考去重新看那道題目時,我們會發現這個我們成年人沒有看懂的要求,不僅僅是要學生寫出計算過程,更核心的是在確認「解題過程」。
Thumbnail
今天想聊一組比較冷門的函式,ARABIC 跟 ROMAN 函式,它可以把羅馬數字轉跟阿拉伯數字互換,語法相當單純好學!