罗马数字转整数

82 阅读1分钟

截屏2022-11-05 23.00.26.png 1、方法一:最优解

const romanToInt = s => { 
    let map = new Map([['I', 1], ['V', 5], ['X', 10], ['L', 50], ['C', 100], ['D', 500], ['M', 1000]]) 
    let res = 0; 
        for (let i = 0; i < s.length; i++) { 
                let left = map.get(s[i]); 
                let right = map.get(s[i + 1]); 
                res += left < right ? -left : left
        } 
    return res };

2、方法二:

var romanToInt = function (s) {
    //map1存储每个单独字母对应的数值
    const map1 = {
        I: 1,
        V: 5,
        X: 10,
        L: 50,
        C: 100,
        D: 500,
        M: 1000
    }
    //I+V=6但是实际IV=4,差2,所以如果传入的字符串中有下列子串,应减去相应的值
    const map2 = {
        IV: 2,
        IX: 2,
        XL: 20,
        XC: 20,
        CD: 200,
        CM: 200
    }
    const arr = s.split('')

    let n = 0
    for (let i = 0; i < arr.length; i++) {
        n += map1[arr[i]]
    }
    for (let j in map2) {

        if (s.indexOf(j) !== -1) {
            n -= map2[j]
        }
    }
    return n
};