罗马数字转整数
时间复杂度:O(n),空间复杂度:O(1) 原理:对每2个罗马数字进行判断
- 先将最为特殊的5、10倍数列出来
- 从头到尾逐个罗马数字进行判断:前一个和后一个的数字大小
- 若前一个 > 后一个,则继续;若前一个 < 后一个,则取前一个的相反数
- 以此类推,直到计算完成
var romanToInt = function (s) {
const symbolValues = new Map();
symbolValues.set('I', 1);
symbolValues.set('V', 5);
symbolValues.set('X', 10);
symbolValues.set('L', 50);
symbolValues.set('C', 100);
symbolValues.set('D', 500);
symbolValues.set('M', 1000);
let ans = 0;
const n = s.length;
for (let i = 0; i < n; ++i) {
const value = symbolValues.get(s[i]);
if (i < n - 1 && value < symbolValues.get(s[i + 1])) {
ans -= value;
} else {
ans += value;
}
}
return ans;
};