题目是 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]]