leetcode 13. Integer to Roman

Use eval, special case processing 6

 var romanToInt = function (s) {
      const map = {
        'I': 1,
        'V': 5,
        'X': 10,
        'L': 50,
        'C': 100,
        'D': 500,
        'M': 1000
      }
      var fns = '0' + s.replace('CM', '+900').
  
        replace('CD', '+400').
        replace('XL': '+40').
        replace('XC', '+90').
        replace('IV', '+4').
        replace('IX', '+9').
        replace(/[C-X]/g, function (c) {
          return "+" + map[c]
        })
      return eval(fns)
    };
    console.log(intToRoman("MCMXCIV"))

Do not use eval

var romanToInt = function (s) {
      const map = {
        'I': 1,
        'V': 5,
        'X': 10,
        'L': 50,
        'C': 100,
        'D': 500,
        'M': 1000
      }
      const specialMap = {
        CM: 900,
        CD: 400,
        XL: 40,
        XC: 90,
        IV: 4,
        IX: 9
      }
      var sum = 0
      for (var i = 0; i < s.length; i++) {
        var c = s[i];
        var more = c + s[i + 1];
        if (specialMap[more]) {
          sum += specialMap[more];
          i += 1;
          continue
        } else {
          sum += map[c]
        }
      }
      return sum
    };

Method 3, we can look at a character code value than the current big if, the big minus.

var romanToInt = function (s) {
      const map = {
        'I': 1,
        'V': 5,
        'X': 10,
        'L': 50,
        'C': 100,
        'D': 500,
        'M': 1000
      }
      var sum = 0
      for (var i = 0; i < s.length; i++) {
        var c = s[i];
        var curr = map[c]
        var after = s[i + 1];
        if (map[after] > curr) {
          sum -= curr
        } else {
          sum += curr
        }
      }
      return sum
    };

Guess you like

Origin www.cnblogs.com/rubylouvre/p/12040415.html