大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。
题目考察的知识点
- 哈希表的使用
- 字符串处理
- 罗马数字转整数
题目解答方法的文字分析
本题要求编写一个函数,计算每头牛的罗马数字之和。罗马数字转整数的规则如下:
- I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
- X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
- C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
为了方便转换,可以创建一个哈希表 unordered_map<char, int>,将罗马数字字符映射为对应的数值。
然后,对于每头牛的罗马数字,我们可以通过遍历字符串的每个字符,并根据上述规则计算每个字符对应的数值,然后累加得到最终结果。
在遍历字符过程中,需要注意处理特殊情况,即当前字符的数值比前一个字符的数值大的情况,这时需要将前一个字符的数值的两倍减去。
本题解析所用的编程语言
C++
完整且正确的编程代码
#include <vector>
#include <unordered_map>
using namespace std;
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param cowsRomanNumeral string字符串vector
* @return int整型
*/
int sumOfRomanNumerals(vector<string>& cowsRomanNumeral) {
// 创建一个哈希表,用于记录罗马数字字符与对应的数值
unordered_map<char, int> romanMap = {
{'I', 1},
{'V', 5},
{'X', 10},
{'L', 50},
{'C', 100},
{'D', 500},
{'M', 1000}
};
int sum = 0; // 总和
int currentValue = 0; // 当前字符的数值
// 遍历每头牛的罗马数字
for (string& roman : cowsRomanNumeral) {
// 遍历罗马数字字符串的每个字符
int prevValue = 0; // 前一个字符的数值
for (int i = 0; i < roman.size(); i++) {
// 获取当前字符的数值
currentValue = romanMap[roman[i]];
// 如果当前字符的数值比前一个字符的数值大,则需要减去前一个字符的数值的两倍(因为前一个字符已经被加过一次了)
if (currentValue > prevValue) {
sum -= prevValue * 2;
}
// 累加当前字符的数值
sum += currentValue;
// 更新前一个字符的数值为当前字符的数值,为下一次遍历做准备
prevValue = currentValue;
}
}
return sum;
}
};

京公网安备 11010502036488号