思路:从最后一个字符开始分析,存入,如果前一个比它小,则减去前一个的值,比如IV 5-1=4
如果前一个比它大或者相等,则加上前一个的值,比如VIII 5+1+1+1=8
代码如下:
class Solution {
public:
int romanToInt(string s) {
//用map来存放罗马字符对应的数字
map<char,int>roma_int={{'I',1},{'V',5},{'X',10},{'L',50},{'C',100},{'D',500},{'M',1000}};
int length=s.length();
//从最后一个往前遍历如果上一个比当前的大则加上,否则减去
int res=roma_int[s[length-1]];
for(int i=length-2;i>=0;i--){
if(roma_int[s[i]]>=roma_int[s[i+1]]){
res+=roma_int[s[i]];
}else{
res-=roma_int[s[i]];
}
}
return res;
}
};