题目描述:
思路解析1:
对于罗马数字,如果左小右大,即后大于前,则后减去前,如:”IV = 5 - 1 = 4“;
如果左大右小,即前大于后,则直接累加即可,如:”VI = 5 + 1 = 6“。
思路解析2:
给定一串罗马数字,可全部采用累加的方式。每一个位置的数都和前一个数相比,如果后小于前,则累加;如果后大于前,则 (后-2×前)。
如题目中的示例 5:给定”MCMXCIV“,第一个位置M值为1000;
第二个位置C < 第一个位置M,则第二个位置值为:100;
第三个位置M > 第二个位置C,则第三个位置值为:1000 - 2 × 100 = 800;
第四个位置X < 第三个位置M,则第四个位置值为:10;
第五个位置C > 第四个位置X,则第五个位置值为:100 - 2 × 10 = 80;
第六个位置I < 第五个位置C,则第五个位置值为:1;
七第六个位置V > 第六个位置I,则第五个位置值为:5 - 2 × 1 = 3;
最终结果为:MCMXCIV = 1000 + 100 + 800 + 10 + 80 + 1 + 3 = 1994
代码:
定义字典将值全部存进去,len(s)表示罗马数字长度,如果前<后,则减法;否则累加。
class Solution:
def romanToInt(self, s: str) -> int:
d = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}
result = 0
for i in range(len(s)):
if(i < (len(s)-1) and d[s[i]] < d[s[i+1]]):
result -= d[s[i]]
else:
result += d[s[i]]
return result