Leetcode 13 Roman to Integer
// 罗马数字采用七个罗马字母作数字
// 即Ⅰ(1 )、X(10 )、C(100 )、M(1000 )、V(5 )、L(50 )、D(500 )
using namespace std;
class Solution {
public :
int romanNumber(char c){
switch (c){
case 'I' :
return 1 ;
case 'X' :
return 10 ;
case 'C' :
return 100 ;
case 'M' :
return 1000 ;
case 'V' :
return 5 ;
case 'L' :
return 50 ;
case 'D' :
return 500 ;
}
}
int romanToInt(string s) {
int sum = 0 ;
int max = 1 ;
for (int i = s.size() - 1 ; i >=0 ; i--){
if (romanNumber(s[i]) >= max){
max = romanNumber(s[i]);
sum += max;
}
else {
sum -= romanNumber(s[i]);
}
}
return sum;
}
};
/*用map比较明智啊
class Solution {
public :
int romanToInt(string s) {
vector<pair<char, int>> map;
map.push_back({'I' ,1 });
map.push_back({'V' ,5 });
map.push_back({'X' ,10 });
map.push_back({'L' ,50 });
map.push_back({'C' ,100 });
map.push_back({'D' ,500 });
map.push_back({'M' ,1000 });
int j, last=-1 , ret = 0 ;
for (int i=s.size()-1 ;i>=0 ;i--)
{
for (j=0 ;j<map.size();j++)
{
if (map[j].first==s[i])
{
if (j<last)
{
ret = ret-map[j].second;
last = -1 ;
}
else
{
ret = ret+map[j].second;
last = j;
}
}
}
}
return ret;
}
};*/