题目
解法一(模拟贪心)
既然称为了贪心,那么肯定就是一直想着取最大就行了
这个题解我习得了pair的用法,不能在类中初始化。
const pair<int,string>simulat[] = {
{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:
string intToRoman(int num) {
string res = "";
for(auto[val,str]:simulat){
//不断循环取最大的,直到比它小
while(num>=val){
res += str;
num -= val;
}
//一旦出现numi = 0 的情况就说明🆗了
if(num==0)
break;
}
return res;
}
};
解法二(模拟十进制硬解)
//空字符代表0,而由于最高只到了3999所以千位只需到3
const string thousands[] = {"", "M", "MM", "MMM"};
const string hundreds[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
const string tens[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
const string ones[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
class Solution {
public:
string intToRoman(int num) {
return thousands[num / 1000] + hundreds[num % 1000 / 100] + tens[num % 100 / 10] + ones[num % 10];
}
};