罗马数字转整数(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
总结
通过逐个拆分罗马数字,判断每个数字与其右侧数字的大小关系,将符合特殊规则的数字取反,然后相加得到最终结果。
          
            
          
评论区