Roman to Integer [LeetCode/Python3/Easy]

 


題目

羅馬數字由七個不同的符號表示:IVXLCDM

符號值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

例如,2用羅馬數字寫為II,只是兩個1相加。12寫為XII,這只是X + II。數字27寫為XXVII,這是XX + V + II

羅馬數字通常從左到右按從大到小的順序書寫。但是,數字四的符號不是IIII。相反,數字四寫為IV。因為1在5之前,所以減去它使其成為4。相同的原則適用於數字9,它寫為IX。有六種情況使用減法:

  • I可以放在V(5)和X(10)之前,以形成4和9。
  • X可以放在L(50)和C(100)之前,以形成40和90。
  • C可以放在D(500)和M(1000)之前,以形成400和900。

給定一個羅馬數字,將其轉換為整數。

範例1:

輸入:s = "III"
輸出:3
解釋:III = 3。

範例2:

輸入:s = "LVIII"
輸出:58
解釋:L = 50,V= 5,III = 3。

範例3:

輸入:s = "MCMXCIV"
輸出:1994
解釋:M = 1000,CM = 900,XC = 90和IV = 4。

限制:

  • 1 <= s.length <= 15
  • s只包含字符('I', 'V', 'X', 'L', 'C', 'D', 'M')
  • 保證s[1, 3999]範圍內的有效羅馬數字。

我的答案

class Solution:
    def romanToInt(self, s: str) -> int:
        Symbol={'I':1, 
                'V':5, 
                'X':10, 
                'L':50, 
                'C':100,
                'D':500,
                'M':1000
                }
        
        s_n=''
        num=0
        for char in s:
            s_n=s_n+char
            if len(s_n) == 2:
                if Symbol[s_n[0]]<Symbol[s_n[1]] and s_n[0] in ['I', 'X', 'C']:
                    num+=Symbol[s_n[1]]-Symbol[s_n[0]]
                    s_n=''
                else:
                    num+=Symbol[s_n[0]]
                    s_n=s_n[1]
                
        if s_n:
            num+=Symbol[s_n]
        
        return num


留言

這個網誌中的熱門文章

[理財/記帳]google表單結合iphone捷徑 自製記帳app

[理財/記帳]利用google表單記帳雲端化 - 免費模板下載@ Mimi's learning notes

[Excel]年份週數換算成月份