Appearance
13. 罗马数字转整数
原题链接:LeetCode 13. 罗马数字转整数
题目描述
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
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
}