1、方法一:最优解
const romanToInt = s => {
let map = new Map([['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++) {
let left = map.get(s[i]);
let right = map.get(s[i + 1]);
res += left < right ? -left : left
}
return res };
2、方法二:
var romanToInt = function (s) {
//map1存储每个单独字母对应的数值
const map1 = {
I: 1,
V: 5,
X: 10,
L: 50,
C: 100,
D: 500,
M: 1000
}
//I+V=6但是实际IV=4,差2,所以如果传入的字符串中有下列子串,应减去相应的值
const map2 = {
IV: 2,
IX: 2,
XL: 20,
XC: 20,
CD: 200,
CM: 200
}
const arr = s.split('')
let n = 0
for (let i = 0; i < arr.length; i++) {
n += map1[arr[i]]
}
for (let j in map2) {
if (s.indexOf(j) !== -1) {
n -= map2[j]
}
}
return n
};