Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
#include<iostream>
#include<string>
using namespace::std;
class Solution {
public:
int romanToInt(string s) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int result = 0;
for(int i = 0; i < s.size(); i++)
{
if(i + 1 < s.size())
{
if(getValue(s[i]) < getValue(s[i+1]))
{
result = result - getValue(s[i]);
}
else
{
result = result + getValue(s[i]);
}
}
else
{
result = result + getValue(s[i]);
}
}
return result;
}
int getValue(char c)
{
switch(c)
{
case 'I':
return 1;
break;
case 'V':
return 5;
break;
case 'X':
return 10;
break;
case 'L':
return 50;
break;
case 'C':
return 100;
break;
case 'D':
return 500;
break;
case 'M':
return 1000;
break;
default:
return 0;
}
}
};
int main()
{
Solution ss;
cout<<"Result: "<<ss.romanToInt("CDXCIX")<<endl;
}
Round 2:
class Solution {
public:
int romanToInt(string s) {
int result = 0;
int m_map[26];
m_map['I'-'A'] = 1;
m_map['V'-'A'] = 5;
m_map['X'-'A'] = 10;
m_map['L'-'A'] = 50;
m_map['C'-'A'] = 100;
m_map['D'-'A'] = 500;
m_map['M'-'A'] = 1000;
for(int i = 0; i < s.size(); i++)
{
if(i+1 < s.size() && m_map[s[i]-'A'] < m_map[s[i+1]-'A'])
{
result += m_map[s[i+1]-'A'] - m_map[s[i]-'A'];
i++;
}
else
{
result += m_map[s[i]-'A'];
}
}
return result;
}
};
Round 3:
class Solution {
public:
int romanToInt(string s) {
unordered_map<char, int> m_map;
m_map['M'] = 1000;
m_map['D'] = 500;
m_map['C'] = 100;
m_map['L'] = 50;
m_map['X'] = 10;
m_map['V'] = 5;
m_map['I'] = 1;
int result = 0;
for(int i = 0; i < s.size(); i++)
{
if(i > 0 && m_map[s[i]] > m_map[s[i-1]])
{
result += m_map[s[i]] - 2*m_map[s[i-1]];
}
else
{
result += m_map[s[i]];
}
}
return result;
}
};