罗马数字转整数
时间复杂度:O(n),空间复杂度:O(1) 原理:对每2个罗马数字进行判断
- 先将最为特殊的5、10倍数列出来
- 从头到尾逐个罗马数字进行判断:前一个和后一个的数字大小
- 若前一个 > 后一个,则继续;若前一个 < 后一个,则取前一个的相反数
- 以此类推,直到计算完成
js 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; };