class Solution { private: unordered_map<char, int> symbolValues = { {'I', 1}, {'V', 5}, {'X', 10}, {'L', 50}, {'C', 100}, {'D', 500}, {'M', 1000}, }; public: int romanToInt(string s) { int ans = 0; int n = s.length(); for (int i = 0; i < n; ++i) { int value = symbolValues[s[i]]; if (i < n - 1 && value < symbolValues[s[i + 1]]) { ans -= value; } else { ans += value; } } return ans; } };解释这段代码
时间: 2024-02-14 20:14:18 浏览: 95
unordered_map:标准的便携式头
这段代码是一个将罗马数字转换为整数的函数,函数名为romanToInt,参数为一个字符串s,表示罗马数字。函数的返回值为一个整数,表示罗马数字对应的整数。
首先,定义一个哈希表symbolValues,用来保存罗马数字对应的整数值。哈希表中的键为罗马数字,值为对应的整数值。
接着,定义一个变量ans,用来保存转换后的整数值,初始化为0。定义变量n,表示字符串s的长度。
然后,使用for循环遍历字符串s中的每个字符,获取当前字符对应的整数值。如果当前字符对应的整数值小于下一个字符对应的整数值(即当前字符在前面的罗马数字中表示的整数值比后面的罗马数字大),则将当前字符表示的整数值减去ans;否则,将当前字符表示的整数值加上ans。这里的判断是为了处理类似于IV、IX等组合的情况。
循环结束后,返回ans即可。
总的来说,这段代码的思路是基于哈希表实现的,通过遍历罗马数字中的每个字符,并根据其对应的整数值进行相应的处理,最终得到罗马数字对应的整数值。
阅读全文