【力扣】 - 13. 罗马数字转整数

270 阅读1分钟

罗马数字转整数

时间复杂度:O(n),空间复杂度:O(1) 原理:对每2个罗马数字进行判断

123.png

  • 先将最为特殊的5、10倍数列出来
  • 从头到尾逐个罗马数字进行判断:前一个和后一个的数字大小
  • 若前一个 > 后一个,则继续;若前一个 < 后一个,则取前一个的相反数
  • 以此类推,直到计算完成
var romanToInt = function (s) {
    const symbolValues = new Map();
    symbolValues.set('I', 1);
    symbolValues.set('V', 5);
    symbolValues.set('X', 10);
    symbolValues.set('L', 50);
    symbolValues.set('C', 100);
    symbolValues.set('D', 500);
    symbolValues.set('M', 1000);
    let ans = 0;
    const n = s.length;
    for (let i = 0; i < n; ++i) {
        const value = symbolValues.get(s[i]);
        if (i < n - 1 && value < symbolValues.get(s[i + 1])) {
            ans -= value;
        } else {
            ans += value;
        }
    }
    return ans;
};