首页 > 其他 > 详细

leetcode 13. Integer to Roman

时间:2019-12-14 18:46:32      阅读:102      评论:0      收藏:0      [点我收藏+]

使用eval,特别处理6个case

 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"))

不使用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
    };

方法3, 我们可以观察一下 下一个字符代码的数值是否比当前的大,大则减去。

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
    };

leetcode 13. Integer to Roman

原文:https://www.cnblogs.com/rubylouvre/p/12040415.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!