返回
前端Leetcode系列|13. 罗马数字转整数,用代码解题!
前端
2024-01-28 18:55:23
罗马数字转整数
罗马数字包含以下七种字符:
- I、V、X、L、C、D 和 M
- 例如,罗马数字 2 写做 II,即为两个并列的 1
- 12 写做 XII,即为 X + II = 10 + 2 = 12
- 21 写做 XXI,即为 XX + I = 20 + 1 = 21
算法步骤:
- 从左到右遍历罗马数字字符串。
- 将每个罗马数字字符转换为相应的数字。
- 将转换后的数字累加到结果中。
- 如果当前罗马数字字符比上一个罗马数字字符大,则将上一个罗马数字字符的数字值减去 2 倍。
- 重复步骤 1-4,直到遍历完整个罗马数字字符串。
示例:
输入:III
输出:3
解释:III = 1 + 1 + 1 = 3
输入:LVIII
输出:58
解释:LVIII = 50 + 5 + 3 = 58
输入:MCMXCIV
输出:1994
解释:MCMXCIV = 1000 + 900 + 90 + 4 = 1994
代码实现:
/*
* @param {string} s 罗马数字字符串
* @return {number} 整数
*/
const romanToInt = (s) => {
const romanMap = {
'I': 1,
'V': 5,
'X': 10,
'L': 50,
'C': 100,
'D': 500,
'M': 1000
};
let result = 0;
let prev = 0;
for (let i = s.length - 1; i >= 0; i--) {
const curr = romanMap[s[i]];
if (curr < prev) {
result -= curr;
} else {
result += curr;
}
prev = curr;
}
return result;
};
def roman_to_int(s):
roman_map = {
'I': 1,
'V': 5,
'X': 10,
'L': 50,
'C': 100,
'D': 500,
'M': 1000
}
result = 0
prev = 0
for i in range(len(s) - 1, -1, -1):
curr = roman_map[s[i]]
if curr < prev:
result -= curr
else:
result += curr
prev = curr
return result
class Solution {
public int romanToInt(String s) {
int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
String[] symbols = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
int result = 0;
for (int i = 0; i < values.length; i++) {
while (s.startsWith(symbols[i])) {
result += values[i];
s = s.substring(symbols[i].length());
}
}
return result;
}
}
总结:
在本文中,我们详细介绍了如何将罗马数字转换为整数。我们从算法步骤开始,然后提供了示例和代码实现。希望这些内容对您有所帮助。如果您有任何问题,请随时留言。