5a3c1b2d创建于 2025年8月3日历史提交
/**
 * @param {string} s
 * @return {number}
 */
var romanToInt = function (s) {
    let romans = {
        I: 1,
        V: 5,
        X: 10,
        L: 50,
        C: 100,
        D: 500,
        M: 1000,
    };

    let arr = s.split('');

    let sum = 0;

    for (let i = arr.length - 1; i >= 0; i--) {
        // IV : 4
        if (romans[arr[i]] === romans['V']) {
            if (romans[arr[i - 1]] === romans['I']) {
                sum -= 1 * 2;
            }
        }
        // IX : 4
        if (romans[arr[i]] === romans['X']) {
            if (romans[arr[i - 1]] === romans['I']) {
                sum -= 1 * 2;
            }
        }
        // XL : 40
        if (romans[arr[i]] === romans['L']) {
            if (romans[arr[i - 1]] === romans['X']) {
                sum -= 10 * 2;
            }
        }
        // XC : 90
        if (romans[arr[i]] === romans['C']) {
            if (romans[arr[i - 1]] === romans['X']) {
                sum -= 10 * 2;
            }
        }
        // CD : 400
        if (romans[arr[i]] === romans['D']) {
            if (romans[arr[i - 1]] === romans['C']) {
                sum -= 100 * 2;
            }
        }
        // CM : 900
        if (romans[arr[i]] === romans['M']) {
            if (romans[arr[i - 1]] === romans['C']) {
                sum -= 100 * 2;
            }
        }

        sum += romans[arr[i]];
    }

    return sum;
};

// Runtime: 148 ms, faster than 80.16% of JavaScript online submissions for Roman to Integer.
// Memory Usage: 47.5 MB, less than 18.15% of JavaScript online submissions for Roman to Integer.

function romanToInt(s) {
    let sum = 0;
    let next = null;
    const romanArr = {
        I: 1,
        V: 5,
        X: 10,
        L: 50,
        C: 100,
        D: 500,
        M: 1000,
    };
    for (let i = 0; i < s.length; i++) {
        next = s[i + 1] || null;
        const curr = s[i];
        if (romanArr[next] > romanArr[curr]) {
            sum -= romanArr[curr];
            continue;
        }
        sum += romanArr[curr];
    }
    return sum;
}

// Runtime 97 ms
// Memory usage: 47.8 MB
// https://leetcode.com/problems/roman-to-integer/submissions/1020204566/