编辑代码

/*
问题描述: 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M, 分别对应数字:1,5, 10, 50,100,500,1000。例如, 罗马数字 2 写做 II ,即 为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。 通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于 大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况: 
I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。 
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。 
给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。
*/
var romanToInt = function(s) {
    let RomaNumDict = {
        "I":1,
        "II":2,
        "III":3,
        "IV":4,
        "V":5,
        "VI":6,
        "VII":7,
        "VIII":8,
        "IX":9,
        "X":10,
        "XX":20,
        "XXX":30,
        "XL":40,
        "L":50,
        "LX":60,
        "LXX":70,
        "LXXX":80,
        "XC":90,
        "C":100,
        "CC":200,
        "CCC":300,
        "CD":400,
        "D":500,
        "DC":600,
        "DCC":700,
        "DCCC":800,
        "CM":900,
        "M":1000,
    }
    let count = 0;
    for(let i=0;i<s.length;){
        let j = (s.length - i)>=4?4:s.length - i
        for(;j>=0;j--){
            let key = s.substring(i,i+j)
            if(RomaNumDict[key]){
                count += RomaNumDict[key];
                break;
            }
        }
        i = i+j;
    }
    return count
};
console.log(romanToInt("DCCCLXXXII"))