代码解决
class Solution { public: // 定义一个哈希表来存储罗马数字符号及其对应的整数值 unordered_map<char, int> res = { {'I', 1}, {'V', 5}, {'X', 10}, {'L', 50}, {'C', 100}, {'D', 500}, {'M', 1000}, }; // 将罗马数字字符串转换为整数的函数 int romanToInt(string s) { int num = 0; // 用于存储最终的整数值 int n = s.size(); // 获取字符串的长度 // 遍历字符串 for (int i = 0; i < n; i++) { int value = res[s[i]]; // 获取当前罗马数字符号对应的整数值 // 如果当前字符不是最后一个字符,并且当前字符的值小于下一个字符的值 if (i < n - 1 && value < res[s[i + 1]]) { num -= value; // 根据罗马数字的规则,减去当前值 } else { num += value; // 否则,加上当前值 } } // 返回最终的整数值 return num; } };
哈希表的初始化:
- 使用一个
unordered_map
来存储罗马数字符号和它们对应的整数值。遍历字符串:
- 遍历输入字符串,对于每个字符,获取其对应的整数值。
- 检查当前字符是否小于下一个字符的值(这意味着当前字符应该被减去),否则将其加到总数中。
处理特殊情况:
- 例如,对于字符串
"IX"
,I
小于X
,因此I
的值应被减去。返回结果:
- 返回计算后的总值,即罗马数字字符串对应的整数值。