3.罗马数字转数字
- 题目
- 题目分析
题目
题目分析
基础思路是先想到键值对,然后遍历字符串利用键值对匹配来计算值,要注意处理IV,IX之类需要将当前处理字符与前一个字符进行比较。
class Solution {
public:
int romanToInt(string s) {
//这个函数接受一个 std::string s,即罗马数字的字符串表示。
//在函数内部,首先创建了一个 std::unordered_map<char, int> 类型的 romanMap,用于存储罗马数字字符和对应的整数值。
//初始化了罗马数字字符与整数值的映射关系。
std::unordered_map<char, int> romanmap = {
{'I', 1},
{'V', 5},
{'X', 10},
{'L', 50},
{'C', 100},
{'D', 500},
{'M', 1000}
};
//result 变量用于存储最终的整数结果,prev 变量用于记录前一个字符对应的整数值。
int result = 0; // Initialize result to 0
int prev = 0; // Correct variable name
//遍历输入的罗马数字字符串中的每个字符:
//获取当前字符对应的整数值 curr。
//如果当前字符对应的整数值大于前一个字符对应的整数值 prev,则需要执行减法操作,因为罗马数字中小的数字在大的数字的右边表示做减法。
//如果不需要减法操作,则直接将当前字符对应的整数值加到结果中。
//更新 prev 为当前字符对应的整数值。
for (char c : s) {
int curr = romanmap[c];
if (curr > prev) {
result += curr - 2 * prev;
//在这里,如果当前字符表示的整数值大于前一个字符表示的整数值,需要将当前字符表示的整数值减去两倍前一个字符表示的整数值,并加到结果中,以此实现减法操作。
} else {
result += curr;
}
prev = curr;
}
return result;
}
};