1.Description
Given a roman numeral, convert it to an integer.
Example 1:
Input: s = "III"
Output: 3
Explanation: III = 3.
Example 2:
Input: s = "LVIII"
Output: 58
Explanation: L = 50, V= 5, III = 3.
Example 3:
Input: s = "MCMXCIV"
Output: 1994
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.
2.Solution
My algorithm
var romanToInt = function (s) { const romanNumber = {I: 1, V: 5, X: 10, L: 50, C: 100, D: 500, M: 1000}; var result = 0; for (var i = 0; i < s.length; i++) { if (romanNumber[s[i]] < romanNumber[s[i + 1]]) { result = result + romanNumber[s[i + 1]] - romanNumber[s[i]]; i++; } else { result = result + romanNumber[s[i]]; } } return result;
};
Optimal Solution
Còn đây là thuật toán mình lượm trên mạng, rất ngắn và rất khó hiểu, đỉnh quá.
var romanToInt = function(s) { const map = { 'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000 } let result = 0; for (let i = 0; i < s.length; i++) { const curr = map[s[i]], next = map[s[i + 1]]; result += curr < next ? - curr : curr; } return result;
};