var romanToInt = function(s) {
const tmap = {
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++) {
if (i<s.length-1&&tmap[s[i]]<tmap[s[i+1]]) {
res -= tmap[s[i]]
} else {
res += tmap[s[i]]
}
}
return res;
};
思路
- 建立映射
- 罗马数字转整数的规律:如果左边小于右边则使用右边的值减去左边,反之则正常相加
例子
- IX=9,因为I = 1,X = 9,所以I < X,最后用X - I = 10 - 1 = 9
- LVIII, 因为L = 50 > V = 5 > I = 1,所以结果为L + V + I + I + I = 50+5+1+1+1=58