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

你可能感兴趣的:(leetcode_p13_罗马数字转换为整数——js实现)