We will implement a simple algorithm to convert the Roman numeral to an integer in Javascript.
Example
Input: 'IV' 'XXIX' 'XVII' Output: 4 29 17
Implementation
- We will create an array with sequence of roman letters and an object which will store the value of the respective roman letters.
- Then we will loop through each letter of the given roman numerals in reverse order.
- With each iteration we will check if the current letters sequence is greater or less than its previous letters.
- If it is less then we will add the value else we will subtract the value.
- Everything will be written in ES6.
let romanToInteger = (roman) => {
//sequence of roman letters
let arr = ['I','V','X','L','C','D','M'];
//value of the respective roman letters
let values = {
I: 1,
V: 5,
X: 10,
L: 50,
C: 100,
D: 500,
M: 1000
};
let sum = 0;
//keep track of the previous index
let prevIndex = 0;
for(let i = roman.length - 1; i >= 0; i--){
//if the current letter is having greater index than previous letter then add values
if(arr.indexOf(roman[i]) >= prevIndex){
sum = sum + values[roman[i]];
}else{
//if the current letter is having lesser index than previous letter then sub values
sum = sum - values[roman[i]];
}
//store the index of the previous roman letters
prevIndex = arr.indexOf(roman[i]);
}
return sum;
}
Input:
console.log(romanToInteger('I'));
console.log(romanToInteger('VI'));
console.log(romanToInteger('XVI'));
console.log(romanToInteger('XXIX'));
Output:
1
6
16
29
How it works
/*How it works 'IV' 'I' is less than 'V' in the sequence ['I','V','X','L','C','D','M'], so we will subtract the value so 5 - 1 = 4; 'XIV' we are looping in reverse direction 'VIX' like this sum = 'V' = 5; As I sequence is less than V we will subtract it sum = sum - 'I' = 5 - 1 = 4; As X sequence is greater than V so we will add it sum = sum + 'X' = 4 + 10 = 14 */
Time complexity: O(n).
Space complexity: O(1).
Time and Space complexity
- We are iterating each letter of the given string, so Time complexity is O(n) where n is the length of the string.
- We are using constant space, so Space complexity is O(1).