Упомянутая вами проблема «от римского к целому числу» — популярная проблема кодирования в LeetCode. Задача — преобразовать римскую цифру в целое число. Я предоставлю вам решение на JavaScript, а затем дам несколько дополнительных методов решения проблемы.
Вот одно из возможных решений с использованием сопоставления римских цифр с соответствующими целочисленными значениями:
const romanToInt = (s) => {
const romanMap = {
I: 1,
V: 5,
X: 10,
L: 50,
C: 100,
D: 500,
M: 1000,
};
let result = 0;
let prevValue = 0;
for (let i = s.length - 1; i >= 0; i--) {
const current = romanMap[s[i]];
if (current >= prevValue) {
result += current;
} else {
result -= current;
}
prevValue = current;
}
return result;
};
// Example usage
console.log(romanToInt("III")); // Output: 3
console.log(romanToInt("IV")); // Output: 4
console.log(romanToInt("IX")); // Output: 9
console.log(romanToInt("LVIII")); // Output: 58
console.log(romanToInt("MCMXCIV")); // Output: 1994
Это решение перебирает входную строку римских цифр справа налево, накапливая целочисленное значение на основе сопоставления. Если меньшая цифра стоит перед большей (например, «IV» вместо 4), она вычитает значение, а не добавляет его.
Дополнительные методы решения этой проблемы включают использование регулярных выражений или создание более полного сопоставления с дополнительными правилами для случаев вычитания, таких как «IV» и «IX».