在這篇文章中,我們將探討 LeetCode 題目 12. Integer to Roman 的解題方法。這是一道經典的模擬題,要求我們將整數轉換為羅馬數字表示。通過這篇文章,你將學會如何高效地解決這道題,並理解羅馬數字的基本規則和轉換技巧。
羅馬數字由以下符號組成:
羅馬數字規則
IV = 4
, IX = 9
)。VI = 6
, XI = 11
)。範例1:
Input: num = 3749
Output: "MMMDCCXLIX"
Explanation:
3749 = 3000 + 700 + 40 + 9
= "MMM" + "DCC" + "XL" + "IX"
= "MMMDCCXLIX"
範例2:
Input: num = 58
Output: "LVIII"
Explanation:
58 = 50 + 8
= "L" + "VIII"
= "LVIII"
範例3:
Input: num = 1994
Output: "MCMXCIV"
Explanation:
1994 = 1000 + 900 + 90 + 4
= "M" + "CM" + "XC" + "IV"
= "MCMXCIV"
我們需要將給定的整數轉換為羅馬數字,這可以通過以下方法實現:
1000 -> "M"
,900 -> "CM"
等)。這種方法確保我們能夠正確地處理所有可能的數字組合。
class Solution:
def intToRoman(self, num: int) -> str:
# 定義羅馬數字的值與符號對應表
value_symbols = [
(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")
]
result = []
# 迭代每個數值與符號
for value, symbol in value_symbols:
# 計算當前符號可以出現的次數
while num >= value:
num -= value
result.append(symbol)
# 將結果列表轉為字串
return "".join(result)
複雜度分析
3999
,對應的羅馬數字轉換步驟是固定的。這道題的關鍵在於熟悉羅馬數字的規則和表示方式,並通過構建從大到小的對應表來模擬轉換過程。使用這種貪心策略,能夠高效地完成數字到羅馬數字的轉換。