题解 | #牛牛和罗马数字智力游戏#
牛牛和罗马数字智力游戏
https://www.nowcoder.com/practice/7f4bd3b2d7d34f5c87d84120d9782c1d
大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。
题目考察的知识点
- 哈希表的使用:将罗马数字字符和对应的数值建立映射,便于后续的转换操作。
- 字符串处理:根据题目要求将整数转换为对应的罗马数字字符串,并根据长度限制进行反转操作。
题目解答方法的文字分析
- 首先,我们需要建立一个有序容器
map来存储罗马数字字符和对应的数值。我们使用greater<int>来实现从大到小的排序,以便在转换整数为罗马数字字符串时从大到小依次处理。 - 定义辅助函数
convertToRoman,用于将给定的整数 num 转换为对应的罗马数字字符串。在该函数中,我们遍历map中的每个键值对,从大到小地检查整数 num 是否大于等于当前的数值,若是,则将对应的罗马数字字符拼接到结果字符串中,并将 num 减去对应的数值。重复该过程,直到 num 为 0。 - 将整数 num 传入辅助函数
convertToRoman,得到对应的罗马数字字符串 result。 - 检查 result 的长度是否大于等于 limit,如果是,则将 result 进行反转操作。
- 返回结果字符串 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不太对啊
您的关注、点赞、收藏就是我创作的动力,三连支持阿Q!
阿Q的题解 文章被收录于专栏
阿Q秋招刷过的题

查看14道真题和解析
