侧边栏壁纸
博主头像
Fonda's Lab 博主等级

关山难越,谁悲失路之人?萍水相逢,尽是他乡之客。

  • 累计撰写 49 篇文章
  • 累计创建 27 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

罗马数字转整数(LeetCode13)

LouisFonda
2024-06-03 / 0 评论 / 0 点赞 / 7 阅读 / 0 字 / 正在检测是否收录...

罗马数字转整数(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

总结

通过逐个拆分罗马数字,判断每个数字与其右侧数字的大小关系,将符合特殊规则的数字取反,然后相加得到最终结果。

0

评论区