挂一个憨憨问题 可能过两天就想明白了

题目是 roman to integer

错误解法


var romanToInt = function(s) {
   examx={"I":1,"V":5,"X":10,"L":50,"C":100,"D":500,"M":1000};
        z=0     
        for (var i=0;i<s.length;i++){
            if (examx[s[i]] >= examx[s[i+1]]){
                z+=examx[s[i]];
            }
            else{
                z-=examx[s[i]];
            }
         }; 
    return z;   
};

正确解法

var romanToInt = function(s) {
   examx={"I":1,"V":5,"X":10,"L":50,"C":100,"D":500,"M":1000};
        z=0     
        for (var i=0;i<s.length;i++){
            if (examx[s[i]] < examx[s[i+1]]){
                z-=examx[s[i]];
            }
            else{
                z+=examx[s[i]];
            }
         }; 
    return z;   
};

罗马数字计数规则:
小数字在大数字前面表示的数是用大数字减去小数字,如 IV=4;
小数字在大数字后面表示的数是用大数字加上小数字,如 VI=6;
所以当前数examx[s[i]] < 下一个数examx[s[i+1]],
就要从总数z中减去当前数examx[s[i]]
否则是总数z加上当前数examx[s[i]]