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
原文地址:https://www.cnblogs.com/WJZheng/p/11354657.html
时间: 2024-11-06 10:26:45