以下为ChatGPT自动生成的解答,正确与否请自行判断。

BFE.devAI解答 - JavaScript 代码题
133. 罗马数字转换为整数

解法一:逐个字符遍历 首先,我们可以按照规则逐个字符进行遍历。

在遍历过程中,每当遇到当前字符大于等于后一个字符时,就将当前字符值加入sum中,否则就减去当前字符值。

具体实现见代码:

function romanToInteger(romanNumber) { const symbolMap = new Map([ ['I', 1], ['V', 5], ['X', 10], ['L', 50], ['C', 100], ['D', 500], ['M', 1000], ]); let sum = 0; for (let i = 0; i < romanNumber.length; i++) { // 取出当前字符和后一个字符对应的数值 const currVal = symbolMap.get(romanNumber[i]); const nextVal = symbolMap.get(romanNumber[i + 1]); if (currVal >= nextVal) { sum += currVal; } else { sum -= currVal; } } return sum; }

解法二:正则表达式替换 另一种更简洁的实现方式是使用正则表达式替换。

首先通过正则表达式将5、50、500这些可以作为减法的数字进行替换。

然后将剩余的字符逐个替换为对应的数字即可。

具体实现见代码:

function romanToInteger(romanNumber) { const replaceMap = new Map([ ['IV', '4'], ['IX', '9'], ['XL', '4'], ['XC', '9'], ['CD', '4'], ['CM', '9'], ['I', '1'], ['V', '5'], ['X', '10'], ['L', '50'], ['C', '100'], ['D', '500'], ['M', '1000'], ]); let numStr = romanNumber; for (const [symbol, num] of replaceMap) { const regex = new RegExp(symbol, 'g'); numStr = numStr.replace(regex, num); } return Number(numStr); }

这里使用了Map结构,将每个需要替换的字符及其对应的数字以键值对的形式存储。注意需要将IV、IX、XL等作为减法的数字排在前面,否则可能会出现替换错误的情况。