原题链接:13. 罗马数字转整数
解题思路:
- 本题涉及到的罗马数字都是唯一的,因此可以创建一个哈希表,存储罗马数字和整数的对应关系。
- 遍历
s
,分别截取从i
开始的2位和1位字符串,查看其在哈希表中的罗马数字对应的整数,将其加和到结果中。
/**
* @param {string} s
* @return {number}
*/
var romanToInt = function (s) {
// 创建罗马数字与整数的对应关系,可以看到它们互相是不重复的
// 每次只需要截取s中的部分字符,在Map中查询对应的整数即可
const map = new Map([
['M', 1000],
['CM', 900],
['D', 500],
['CD', 400],
['C', 100],
['XC', 90],
['L', 50],
['XL', 40],
['X', 10],
['IX', 9],
['V', 5],
['IV', 4],
['I', 1],
])
// 储存结果
let result = 0
// 遍历s,查询罗马数字对应的整数
for (let i = 0; i < s.length; ) {
// 截取两个字符,查看是否满足两位罗马数字
if (map.has(s.substr(i, 2))) {
// 将对应的整数加和到result
result += map.get(s.substr(i, 2))
// 计算了2位罗马数字,指针向后移动2位
i += 2
} else {
// 将对应的整数加和到结果
result += map.get(s.substr(i, 1))
// 计算了1位罗马数字,指针向后移动1位
i += 1
}
}
return result
}