利用字典
法一:
class Solution {
public:
int romanToInt(string s) {
int sum=0;
unordered_map<char,int> m{{'I',1},{'V',5},{'X',10},{'L',50},{'C',100},{'D',500},{'M',1000}};
for(int i=0;i<s.size();i++){
int val=m[s[i]];
if(i==s.size()-1 || m[s[i+1]]<=m[s[i]]) sum+=val;
else sum-=val;
}
return sum;
}
};
法二:
暴力判断
class Solution {
public:
int romanToInt(string s) {
int len = s.size();
if(len == 0)
return 0;
int sum = 0;
for(int i=0; i<len; ++i){
if(i !=len-1 && s[i]=='I' && (s[i+1] == 'V' || s[i+1] == 'X')){
sum -= 1; continue;
}
if(i !=len-1 && s[i]=='X' && (s[i+1] == 'L' || s[i+1] == 'C')){
sum -= 10; continue;
}
if(i !=len-1 && s[i]=='C' && (s[i+1] == 'D' || s[i+1] == 'M')){
sum -= 100; continue;
}
// +1
if(s[i] == 'I'){
sum += 1;
}
//+5
if(s[i] == 'V'){
sum += 5;
}
//+10
if(s[i] == 'X'){
sum += 10;
}
//+50
if(s[i] == 'L'){
sum += 50;
}
//+100
if(s[i] == 'C'){
sum += 100;
}
//+500
if(s[i] == 'D'){
sum += 500;
}
//+1000
if(s[i] == 'M'){
sum += 1000;
}
}
return sum;
}
};