Roman To Integer Problem: Roman numerals are represented by seven different symbols: I
, V
, X
, L
, C
, D
and M
.
Symbol Value I 1 V 5 X 10 L 50 C 100 D 500 M 1000
For example, 2
is written as II
in Roman numeral, just two ones added together. 12
is written as XII
, which is simply X + II
. The number 27
is written as XXVII
, which is XX + V + II
.
Roman numerals are usually written largest to smallest from left to right. However, the numeral for four is not IIII
. Instead, the number four is written as IV
. Because the one is before the five we subtract it making four. The same principle applies to the number nine, which is written as IX
. There are six instances where subtraction is used:
I
can be placed beforeV
(5) andX
(10) to make 4 and 9.X
can be placed beforeL
(50) andC
(100) to make 40 and 90.C
can be placed beforeD
(500) andM
(1000) to make 400 and 900.
Given a roman numeral, convert it to an integer.
Example :
Input: s = “III” Output: 3 Explanation: III = 3
Table of Contents
Roman To Integer Problem Solution
Problem Solution In Python
class Solution:
def romanToInt(self, s: str) -> int:
maps = {'I' : 1,'V' : 5,'X' : 10,
'L' : 50,'C' : 100,'D' : 500,'M' : 1000}
sums = 0
i = 0
while i < len(s)-1:
if maps[s[i]] < maps[s[i+1]]:
sums += maps[s[i+1]]-maps[s[i]]
i += 1
else:
sums += maps[s[i]]
i += 1
if i != len(s):
sums += maps[s[-1]]
return sums
Problem Solution In Java
import java.util.*;
class Solution {
public int romanToInt(String s) {
HashMap<Character,Integer>map=new HashMap<Character,Integer>();
map.put('I',1);
map.put('V',5);
map.put('X',10);
map.put('L',50);
map.put('C',100);
map.put('D',500);
map.put('M',1000);
int result=map.get(s.charAt(s.length()-1));
for(int i=s.length()-1;i>0;i--)
{
if(map.get(s.charAt(i))<=map.get(s.charAt(i-1)))
{
result+=map.get(s.charAt(i-1));
}
else
{
result-=map.get(s.charAt(i-1));
}
}
return result;
}
}
Problem Solution In C++
class Solution {
int getTranslateNum(char s) {
switch(s) {
case 'I': return 1;
case 'V': return 5;
case 'X': return 10;
case 'L': return 50;
case 'C': return 100;
case 'D': return 500;
case 'M': return 1000;
default: return 0;
}
return 0;
}
public:
int romanToInt(string s) {
if(s.empty()) return 0;
int returnValue = 0;
for(unsigned int i=0; i<s.size()-1; i++) {
if(getTranslateNum(s[i]) < getTranslateNum(s[i+1])) {
returnValue -= getTranslateNum(s[i]);
} else {
returnValue += getTranslateNum(s[i]);
}
}
returnValue += getTranslateNum(s[s.size()-1]);
return returnValue;
}
};
Problem Solution In C
int getValue(const char * s){
switch(*s) {
case 'I': return (s[1] == 'V' || s[1] == 'X') ? -1 : 1;
case 'X': return (s[1] == 'L' || s[1] == 'C') ? -10 : 10;
case 'C': return (s[1] == 'D' || s[1] == 'M') ? -100 : 100;
case 'V': return 5;
case 'L': return 50;
case 'D': return 500;
case 'M': return 1000;
}
return 0;
}
int romanToInt(char * s){
int result = 0;
for(;*s != '\0'; ++s) {
result += getValue(s);
}
return result;
}