Leetcode Link: 13. 罗马数字转整数 - 力扣(LeetCode)
题目

解法一
思路:自己的解法
- 特例是有限的,每次先匹配特例
- 特例不能匹配上后再单独考虑
题解:
class Solution:
def romanToInt(self, s: str) -> int:
d = {'IX': 9, 'IV': 4, 'XL':40, 'XC':90, 'CD':400, 'CM':900} # 特例
val = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000} # 单独罗马表示
res = 0
i = 0
while(i<len(s)):
# 先匹配特例,不成后再单独匹配
if i+1 < len(s) and s[i:i+2] in d:
res += d[s[i:i+2]]
i += 2
else:
res += val[s[i]]
i += 1
return res解法二
思路: 或者
这题懂了就非常简单。首先建立一个 HashMap 来映射符号和值,然后对字符串从左到右来,如果当前字符代表的值不小于其右边,就加上该值;否则就减去该值。以此类推到最左边的数,最终得到的结果即是答案
题解: