Roman to Integer - LeetCode
----- Условие ----- Требуется перевести строку, состоящую из римских цифр, в число. Для римских цифр (в рамках данной задачи) вычитание используется в шести случаях: I можно поставить перед V (5) и X (10), чтобы получить 4 и 9. X можно поставить перед L (50) и C (100), чтобы получить 40 и 90. C можно поставить перед D (500) и M (1000), чтобы получить 400 и 900.
----- Решение ----- Для решения необходимо пройтись в цикле по всем элементам строки: если следующий элемент больше текущего, то текущий надо вычесть из общей суммы, иначе добавить. Сложность алгоритма по памяти O(1), сложность по времени O(n), где n - длина строки.
----- Код ----- /** * @param {string} s * @return {number} */ const romanToInt = function(s) { const dict = { ‘I’: 1, ‘V’: 5, ‘X’: 10, ‘L’: 50, ‘C’: 100, ‘D’: 500, ‘M’: 1000, };
let sum = 0;
for (let i = 0; i < s.length; i++) { const currentNumber = dict[s[i]]; if (i < s.length - 1 && currentNumber < dict[s[i + 1]]) { sum -= currentNumber; } else { sum += currentNumber; } }
return sum; };