leetcode_p13_罗马数字转换为整数——js实现

题目: Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999. 解决思路:

  1. 罗马数字的表示 'I': 1,'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000
  2. 从左向右遍历罗马数字,若当前数字(cur)小于或等于上一个数字
    (pre),则相加;
  3. 若当前数大于上一个数,则result = result - 2 * pre + cur;(减去两倍pre是因为之前result中包含已经加过一次的 pre)
  4. 测试用例:‘MCMCXCVI’:1996
    该罗马数字转换时应拆为M,CM,XC, VI几个数之和
var romanToInt = function(s) { var map = { 'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000 }; // result中存的是pre左侧(包括pre在内)的所有数字之和 var result = 0; var arr = s.split(''); var pre = map[arr[0]]; var cur; if(s.length <= 0) { return result; } else { result = pre; for (var i = 1; i < s.length; i++) { cur = map[arr[i]]; if (cur <= pre) { result += cur; } else { result = result - 2 * pre + cur; } pre = cur; } return result; } };

    推荐阅读