13.罗马数字转整数

class Solution:
    def romanToInt(self, s: str) -> int:
        # 将各个字母表示的数字存入字典中
        numeral_map = {"I":1,"V":5,"X":10,"L":50,"C":100,"D":500,"M":1000}
        # 存储罗马字母转成的整数值
        result = 0
        
        for i in range(len(s)):
            # 判断后一个数是否大于前一个数
            if i > 0 and numeral_map[s[i]] > numeral_map[s[i-1]]:
                # 为什么要*2?因为先执行的else语句,前一个数会加上后一个数。“MCMXCIV”为例:
                # 第一步:i = 0, 执行else: result = 1000
                # 第二步:i = 1, C<M, 执行else:result = 1000+100
                # 第三步:i = 2, M>C, 执行if: result = 1000+100 + 1000-2*100 = 1900,知道为什么*2了吧!
                result += numeral_map[s[i]] - 2*numeral_map[s[i-1]]
            else:
                result += numeral_map[s[i]]
        return result

 

posted @ 2019-08-14 20:57  我叫郑小白  阅读(146)  评论(0编辑  收藏  举报