罗马数字转整数(LeetCode13)
题目描述:
给定一个罗马数字,将其转换成整数。
示例:
- 输入: s = "III"
输出: 3 - 输入: s = "IV"
输出: 4 - 输入: s = "IX"
输出: 9 - 输入: s = "LVIII"
输出: 58 - 输入: s = "MCMXCIV"
输出: 1994
思路:
罗马数字的每一个字母代表一个数字,比如 V 代表 5,I 代表 1,VI 就表示 6,VII 表示 7,也有特殊情况,比如 IV 表示 4,IX 表示 9。我们将给定的罗马数字逐个拆分,如果当前数字比右侧的数字小,则将当前数字取反,再相加。
代码实现:
// 罗马数字映射表
const map = new Map([
['I', 1],
['V', 5],
['X', 10],
['L', 50],
['C', 100],
['D', 500],
['M', 1000]
]);
const romanToInt = function (s) {
const nums = Array.prototype.map.call(s, (char) => map.get(char));
const len = nums.length;
let res = 0;
for (let i = 0; i < len; i++) {
if (i < len - 1 && nums[i] < nums[i + 1]) {
nums[i] = -nums[i];
}
res += nums[i];
}
return res;
};
console.log(romanToInt('XXVII')); // Output: 27
总结
通过逐个拆分罗马数字,判断每个数字与其右侧数字的大小关系,将符合特殊规则的数字取反,然后相加得到最终结果。
评论区