Skip to content

13. Roman to Integer

https://leetcode.com/problems/roman-to-integer/

c++
class Solution {
public:
    int romanToInt(string s) {
        unordered_map<char, int> m = {
            {'I', 1},
            {'V', 5},
            {'X', 10},
            {'L', 50},
            {'C', 100},
            {'D', 500},
            {'M', 1000}
        };
        int n = s.length();
        int result = 0;
        for (int i = 0; i < n - 1; i++) {
            if (m[s[i]] < m[s[i + 1]]) {
                result -= m[s[i]];
            } else {
                result += m[s[i]];
            }
        }
        result += m[s[n - 1]];
        return result;
    }
};
go
func romanToInt(s string) int {
    vals := []int{1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}
    symbols := []string{"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}
    result := 0

    for i := 0; len(s) > 0; i++ {
        symLen := len(symbols[i])

        for len(s) >= symLen {
            if s[:symLen] == symbols[i] {
                result += vals[i]
                s = s[symLen:]
            } else {
                break
            }
        }
    }

    return result
}
js
/**
 * @param {string} s
 * @return {number}
 */
var romanToInt = function(s) {
  var vals = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]
  var symbols = ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I']
  var result = 0

  for (let i = 0; s.length > 0; i++) {
    while (s.startsWith(symbols[i])) {
      s = s.substring(symbols[i].length)
      result += vals[i]
    }
  }

  return result
}
py
class Solution(object):

    def romanToInt(self, s):
        """
        :type s: str
        :rtype: int
        """
        vals = [
            1000, 900, 500, 400, 100, 90,
            50, 40, 10, 9, 5, 4, 1
        ]
        symbols = [
            'M', 'CM', 'D', 'CD', 'C', 'XC',
            'L', 'XL', 'X', 'IX', 'V', 'IV', 'I'
        ]
        result = 0
        i = 0
        while len(s) > 0:
            while s.startswith(symbols[i]):
                s = s[len(symbols[i]):]
                result += vals[i]
            i += 1
        return result