LeetCode Roman to Integer

LeetCode解题之Roman to Integer

原题

将一个罗马数字转化为阿拉伯数字,范围在1-3999。下面是罗马数字的介绍及基本规则:

罗马数字采用七个罗马字母作数字、即Ⅰ(1)、X(10)、C(100)、M(1000)、V(5)、L(50)、D(500)。记数的方法:

  • 相同的数字连写,所表示的数等于这些数字相加得到的数,如 Ⅲ=3
  • 小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数,如 Ⅷ=8、Ⅻ=12
  • 小的数字(限于 Ⅰ、X 和 C)在大的数字的左边,所表示的数等于大数减小数得到的数,如 Ⅳ=4、Ⅸ=9

注意点:

  • 输入的罗马数字是符合规范的,不需要考虑错误情况

例子:

输入: s=”XCIX”
输出: 99

解题思路

根据罗马数字的规则,只有在前面的字母比当前字母小的情况下要执行减法,其他情况只需要把罗马字母对应的数字直接相加即可。如果发现前一个字母比当前字母小,就减去前一个字母,因为错误的把它加入了结果,且在加上当前字母时还要减去前一个字母的值。

AC源码

class Solution(object):
    def romanToInt(self, s):
        """ :type s: str :rtype: int """
        map = {"M": 1000, "D": 500, "C": 100, "L": 50, "X": 10, "V": 5, "I": 1}
        result = 0
        for i in range(len(s)):
            if i > 0 and map[s[i]] > map[s[i - 1]]:
                result -= map[s[i - 1]]
                result += map[s[i]] - map[s[i - 1]]
            else:
                result += map[s[i]]
        return result

# Test cases
if __name__ == "__main__":
    assert Solution().romanToInt("XII") == 12
    assert Solution().romanToInt("XXI") == 21
    assert Solution().romanToInt("XCIX") == 99

欢迎查看我的Github (https://github.com/gavinfish/LeetCode-Python) 来获得相关源码。

你可能感兴趣的:(LeetCode,算法,python,罗马数字)