罗马数字转整数
js
// 时间复杂度: O(n)
// 考点:哈希表 - 将罗马字母与它所代表的整数建立映射关系,使得根据字母查找对应的数字更为方便快捷
var romanToInt = function (s = '') {
let map = new Map([
['I', 1],
['V', 5],
['X', 10],
['L', 50],
['C', 100],
['D', 500],
['M', 1000]
])
let result = 0
let len = s.length
for (let i = 0; i < len; i++) {
let cur = map.get(s[i])
let next = i + 1 < len ? map.get(s[i + 1]) : 0
// console.log(cur, next)
if (cur < next) { // 根据题意如果当前值比后面的值要小,说明这两个字母代表的数字构成了一个组合,应先减去当前值
result -= cur
} else { // 否则就累加
result += cur
}
}
return result
}
console.log(romanToInt('XII')) // 12
console.log(romanToInt('XXI')) // 21
console.log(romanToInt('IV')) // 4