题解 | #牛牛的罗马时代节日#

牛牛的罗马时代节日

https://www.nowcoder.com/practice/97447e046b704ffda3f51281bd7e296b

考察的知识点:哈希;

解答方法分析:

  1. 创建一个无序映射roman_map,将罗马数字的字符映射为对应的整数值。
  2. 声明一个整数变量n,用于存储向量cowsRomanNumeral的大小。
  3. 声明一个整数变量sum,并初始化为0,用于存储罗马数字的和。
  4. 使用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值,以备下一次循环使用。
  5. 循环结束后,返回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;
    }
};

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务