Skip to content

力扣链接:13.罗马数字转整数

难度:⭐

解题关键词:数组map

解题思路:从前往后遍历,先往后多看一位,如果前后两个可以凑成 map 中的元素,那么优先处理,否则一个一个罗马字母去转换,最后加和。

typescript
function romanToInt(s: string): number {
  let sum = 0;

  const map = new Map([
    ["I", 1],
    ["V", 5],
    ["X", 10],
    ["L", 50],
    ["C", 100],
    ["D", 500],
    ["M", 1000],

    ["IV", 4],
    ["IX", 9],
    ["XL", 40],
    ["XC", 90],
    ["CD", 400],
    ["CM", 900],
  ]);

  for (let i = 0; i < s.length; i++) {
    // 先往后多看一位,如果前后两个可以凑成 map 中的元素,那么优先处理
    if (map.has(`${s[i]}${s[i + 1]}`)) {
      sum += map.get(`${s[i]}${s[i + 1]}`);
      i += 1;
    } else if (map.has(s[i])) {
      sum += map.get(s[i]);
    }
  }

  return sum;
}