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

题目

解法一

思路:自己的解法

  1. 特例是有限的,每次先匹配特例
  2. 特例不能匹配上后再单独考虑

题解

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 来映射符号和值,然后对字符串从左到右来,如果当前字符代表的值不小于其右边,就加上该值;否则就减去该值。以此类推到最左边的数,最终得到的结果即是答案

题解

启发和联系