Skip to content
On this page

13. 罗马数字转整数

原题链接:LeetCode 13. 罗马数字转整数

题目描述

罗马数字包含以下七种字符: IVXLCDM

2

示例 2:

输入: s = "IV" 输出: 4

示例 3:

输入: s = "IX" 输出: 9

示例 4:

输入: s = "LVIII" 输出: 58 解释: L = 50, V= 5, III = 3.

示例 5:

输入: s = "MCMXCIV" 输出: 1994 解释: M = 1000, CM = 900, XC = 90, IV = 4.

提示:

- `1 <= s.length <= 15`

- `s` 仅含字符 `('I', 'V', 'X', 'L', 'C', 'D', 'M')`

- 题目数据保证 `s` 是一个有效的罗马数字,且表示整数在范围 `[1, 3999]` 内

- 题目所给测试用例皆符合罗马数字书写规则,不会出现跨位等情况。

- IL 和 IM 这样的例子并不符合题目要求,49 应该写作 XLIX,999 应该写作 CMXCIX 。

关于罗马数字的详尽书写规则,可以参考 罗马数字 - 百度百科。

难度: Easy


题解代码

javascript
/**
 * @param {string} s
 * @return {number}
 */
var romanToInt = function(s) {
  const hash = {
    "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
  }
  let res = 0
  const arr = ["IV", 'IX', 'XL', 'XC', 'CD', 'CM']
  while (s.length) {
    const s1 = s.slice(0, 2)
    if (arr.includes(s1)) {
      res += hash[s1]
      s = s.slice(2)
        
    } else {
      res += hash[s.slice(0, 1)]
      s = s.slice(1)
    }
  }
  return res
}

技术文档集合