思路
通过对提议的分析 将所需要用到的数字与其对应的罗马数字 制作成pair
通过不断的最大化减法 累计roma字符 最终获得最优解
注意点
尝试在类定义内部使用初始化列表直接初始化一个非const且非static的数组成员
方法:
1.使用固定大小的数组并直接指定大小:
class MyClass {
public:
MyClass() : myArray{1, 2, 3} {} // 使用构造函数初始化列表
private:
int myArray[3]; // 固定大小的数组
};
2.在类体外初始化数组成员:
class MyClass {
public:
static std::pair<int, std::string> pairs[];
};
// 在类体外初始化数组
std::pair<int, std::string> MyClass::pairs[] = {
{1000, "M"},
{900, "CM"},
{500, "D"},
{400, "CD"},
// ...
};
3.使用构造函数和初始化列表:
class MyClass {
public:
MyClass() : pairs{ {1000, "M"}, {900, "CM"}, {500, "D"}, {400, "CD"}, /* ... */ } {}
private:
std::pair<int, std::string> pairs[13]; // 固定大小的数组
};
代码
const pair<int, string> pairs[] = {
{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"},
};
class Solution {
public:
const pair<int, string> pairs[] = {
{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"},
};
string intToRoman(int num) {
string roma;
for(const auto &[value,symbol] : pairs)
{
while(num >= value)
{
num -= value;
roma += symbol;
}
if(num == 0) break;
}
return roma;
}
};