因为有几种特殊情况是小的数在前,所以在转换的时候要判断一下是否是特殊情况,利用键对应的值来判断大小
C++
class Solution {
public:
int romanToInt(string s) {
map<char,int> luoma={
{'M',1000},
{'D',500},
{'C',100},
{'L',50},
{'X',10},
{'V',5},
{'I',1}
};
int result = 0;
for(int i = 0;i<s.size();i++){
if(luoma[s[i]] < luoma[s[i+1]])
result -= luoma[s[i]];
else
result += luoma[s[i]];
}
return result;
}
};
Python
这里循环到range(n-1),因为下面有i+1所以i不能到最后一个。这样最后一个就没有进入循环,所以最后要单独加上它。上面c++因为使用map,当他查不到这个值得时候就会自动创建一个,默认0
class Solution:
def romanToInt(self, s: str) -> int:
result = 0
luoma = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
n = len(s)
for i in range(n-1):
if luoma[s[i]] < luoma[s[i+1]]:
result -= luoma[s[i]]
else:
result += luoma[s[i]]
return result + luoma[s[-1]]