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 时,没有下一位了,直接加上末尾