13. 罗马数字转整数

题目链接:https://leetcode.cn/problems/roman-to-integer/

题目描述:将给定的罗马数字转化为整数

思路:一般的罗马数字都是从左到右依次变小,但是有几种情况小的罗马数字在左边,例如IV(4),I在V的左边,此时我们可以看作I表示的是一个负值,减去I的值就好。所以从左到右依次判断,当当前的数字比下一个数字小时,就减去当前罗马数字代表的数值。

代码:

class Solution:

    SYMBOL_VALUES = {
        'I': 1,
        'V': 5,
        'X': 10,
        'L': 50,
        'C': 100,
        'D': 500,
        'M': 1000,
    }

    def romanToInt(self, s: str) -> int:
        ans = 0
        n = len(s)
        for i, ch in enumerate(s):
            value = Solution.SYMBOL_VALUES[ch]
            if i < n - 1 and value < Solution.SYMBOL_VALUES[s[i + 1]]:
                ans -= value
            else:
                ans += value
        return ans

总结与反思:

1. 建立罗马数字与值的对应

2. 注意不同条件,当i = n-1 时,没有下一位了,直接加上末尾

posted @ 2022-10-31 08:26  我是球啊  阅读(28)  评论(0编辑  收藏  举报