Skip to content

罗马数字转整数

LeetCode-13

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