原题链接: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))) {// 将对应的整数加和到resultresult += map.get(s.substr(i, 2))// 计算了2位罗马数字,指针向后移动2位i += 2} else {// 将对应的整数加和到结果result += map.get(s.substr(i, 1))// 计算了1位罗马数字,指针向后移动1位i += 1}}return result
}