题解 | #牛牛的罗马时代节日#
牛牛的罗马时代节日
https://www.nowcoder.com/practice/97447e046b704ffda3f51281bd7e296b
考察的知识点:哈希;
解答方法分析:
- 创建一个无序映射roman_map,将罗马数字的字符映射为对应的整数值。
- 声明一个整数变量n,用于存储向量cowsRomanNumeral的大小。
- 声明一个整数变量sum,并初始化为0,用于存储罗马数字的和。
- 使用for循环遍历向量owsRomanNumeral中的每个元素,使用i作为循环变量。在循环中,获取当前遍历的罗马数字字符串,将其存储在变量roman中。声明一个整数变量prev_value,并初始化为0,用于存储前一个字符对应的值。使用for循环遍历罗马数字字符串roman中的每个字符,使用j作为循环变量。在循环中,获取当前遍历的字符对应的值,将其储在变量current_value中,使用roman_map的映射关系现。如果current大于prev_value,说明当前字符的值比前一个字符值要大,需要进行相应的调整:sum减去前一个字符对的值乘以2。将current_value加到sum中。更新prev_value为current_value值,以备下一次循环使用。
- 循环结束后,返回sum作为结果。
所用编程语言:C++;
完整编程代码:↓
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param cowsRomanNumeral string字符串vector
* @return int整型
*/
int sumOfRomanNumerals(vector<string>& cowsRomanNumeral) {
unordered_map<char, int> roman_map {
{'I', 1},
{'V', 5},
{'X', 10},
{'L', 50},
{'C', 100},
{'D', 500},
{'M', 1000}};
int n = cowsRomanNumeral.size();
int sum = 0;
for (int i = 0; i < n; i++) {
string roman = cowsRomanNumeral[i];
int prev_value = 0;
for (int j = 0; j < roman.length(); j++) {
int current_value = roman_map[roman[j]];
if (current_value > prev_value) {
sum -= prev_value * 2;
}
sum += current_value;
prev_value = current_value;
}
}
return sum;
}
};