大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。

题目考察的知识点

  • 哈希表的使用:将罗马数字字符和对应的数值建立映射,便于后续的转换操作。
  • 字符串处理:根据题目要求将整数转换为对应的罗马数字字符串,并根据长度限制进行反转操作。

题目解答方法的文字分析

  1. 首先,我们需要建立一个有序容器 map 来存储罗马数字字符和对应的数值。我们使用 greater<int> 来实现从大到小的排序,以便在转换整数为罗马数字字符串时从大到小依次处理。
  2. 定义辅助函数 convertToRoman,用于将给定的整数 num 转换为对应的罗马数字字符串。在该函数中,我们遍历 map 中的每个键值对,从大到小地检查整数 num 是否大于等于当前的数值,若是,则将对应的罗马数字字符拼接到结果字符串中,并将 num 减去对应的数值。重复该过程,直到 num 为 0。
  3. 将整数 num 传入辅助函数 convertToRoman,得到对应的罗马数字字符串 result。
  4. 检查 result 的长度是否大于等于 limit,如果是,则将 result 进行反转操作。
  5. 返回结果字符串 result。

本题解析所用的编程语言

C++

完整且正确的编程代码

#include <string>
#include <map>
#include <algorithm>
using namespace std;

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param num int整型 
     * @param limit int整型 
     * @return string字符串
     */
    string integerToRomanWithReverse(int num, int limit) {
        // 创建一个有序容器,用于将整数值映射为对应的罗马数字字符串
        map<int, string, greater<int>> romanMap = {
            {1000, "M"},
            {900, "CM"},
            {500, "D"},
            {400, "CD"},
            {100, "C"},
            {90, "XC"},
            {50, "L"},
            {40, "XL"},
            {10, "X"},
            {9, "IX"},
            {5, "V"},
            {4, "IV"},
            {1, "I"}
        };

        // 定义一个辅助函数,将整数 num 转换为对应的罗马数字字符串
        auto convertToRoman = [&](int num) {
            string result;
            for (auto it = romanMap.begin(); it != romanMap.end(); it++) {
                int value = it->first;
                string roman = it->second;
                while (num >= value) {
                    result += roman;
                    num -= value;
                }
            }
            return result;
        };

        // 将整数 num 转换为对应的罗马数字字符串
        string result = convertToRoman(num);

        // 如果字符串长度大于等于 limit,则进行反转操作
        if (result.length() >= limit) {
            reverse(result.begin(), result.end());
        }

        return result;
    }
};

999=900+90+9 不逆序的话应该是CM XC IX 拼接 答案逆序是CX CM IX不太对啊

https://www.zfuhao.com/luoma

您的关注、点赞、收藏就是我创作的动力,三连支持阿Q!