天天看點

<LeetCode天梯>Day045 羅馬數字轉整數(哈希表) | 初級算法 | Python

以下為我的天梯積分規則:

每日至少一題:一題積分+10分

若多做了一題(或多一種方法解答),則當日積分+20分(+10+10)

若做了三道以上,則從第三題開始算+20分(如:做了三道題則積分-10+10+20=40;做了四道題則積分–10+10+20+20=60)

初始分為100分

若差一天沒做題,則扣積分-10分(周六、周日除外注:休息)

堅持!!!

初級算法

刷題目錄

數學

<LeetCode天梯>Day045 羅馬數字轉整數(哈希表) | 初級算法 | Python
<LeetCode天梯>Day045 羅馬數字轉整數(哈希表) | 初級算法 | Python

題幹

羅馬數字包含以下七種字元: I, V, X, L,C,D 和 M。

字元 數值

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 。

通常情況下,羅馬數字中小的數字在大的數字的右邊。但也存在特例,例如 4 不寫做 IIII,而是 IV。數字 1 在數字 5 的左邊,所表示的數等于大數 5 減小數 1 得到的數值 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

示例2:

輸入: s = “IV”

輸出: 4

示例3:

輸入: s = “IX”

輸出: 9

示例4:

輸入: s = “LVIII”

輸出: 58

解釋: L = 50, V= 5, III = 3.

示例5:

輸入: s = “MCMXCIV”

輸出: 1994

解釋: M = 1000, CM = 900, XC = 90, IV = 4.

哈希表

分析:

其實道理都一樣,先将這些關鍵詞存入哈希表,然後周遊查表擷取表的值在相加得到最後的結果。

class Solution:
    def romanToInt(self, s: str) -> int:
        dictory = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}
        res = 0
        n = len(s)
        for x in range(n-1,-1,-1):
            if res > 4*dictory[s[x]]:
                res -= dictory[s[x]]
            else:
                res += dictory[s[x]]

        return res      
<LeetCode天梯>Day045 羅馬數字轉整數(哈希表) | 初級算法 | Python