ericpuwang

罗马数字转整数

https://leetcode.cn/problems/roman-to-integer/description/

罗马数字包含以下七种字符: IVXLCDM。 | 符号 | 值 | | :— | :— | | I | 1 | | V | 5 | | X | 10 | | L | 50 | | C | 100 | | D | 500 | | M | 1000 |

例如, 罗马数字2写做II,即为两个并列的112写做XII,即为X+II27写做XXVII, 即为XX+V+II。 通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如4不写做IIII,而是IV。数字1在数字5的左边,所表示的数等于大数5减小数1得到的数值4。同样地,数字9表示为IX。这个特殊的规则只适用于以下六种情况:

示例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:
        hashmap = {
            'I': 1,
            'IV': 3,
            'V': 5,
            'IX': 8,
            'X': 10,
            'XL': 30,
            'L': 50,
            'XC': 80,
            'C': 100,
            'CD': 300,
            'D': 500,
            'CM': 800,
            'M': 1000
        }
        num = hashmap[s[0]]
        for index in range(1, len(s)):
            if s[index-1:index+1] in hashmap:
                num += hashmap[s[index-1:index+1]]
            else:
                num += hashmap[s[index]]
        return num