题解 | #牛牛的罗马时代节日#
牛牛的罗马时代节日
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; } };