Back to all solutions

#13 - Roman to Integer

Problem Description

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 one's 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 before `V (5)` and `X (10)` to make 4 and 9.
  • `X` can be placed before `L (50)` and `C (100)` to make 40 and 90.
  • `C` can be placed before `D (500)` and `M (1000)` to make 400 and 900.

Given a roman numeral, convert it to an integer.

Solution

/**
 * @param {string} s
 * @return {number}
 */
var romanToInt = function(s) {
  const map = { M: 1000, D: 500, C: 100, L: 50, X: 10, V: 5, I: 1 };

  return s.split('').reduce((result, v, i) => {
    result += map[v] >= map[s[i + 1]] || s.length === i + 1
      ? map[v]
      : -1 * map[v];
    return result;
  }, 0);
};