读题心路历程: 这道题,我看完第一遍,觉得暴力来一波,把数字对应罗马字符比较特殊的提前记录下来。但是看了题解感觉还是题解的方式好一点。题解原链接:https://leetcode.cn/problems/integer-to-roman/solution/tan-xin-ha-xi-biao-tu-jie-by-ml-zimingmeng/
利用贪心算法,输入整数之后,就找每一个数字的最大值。例如1994:
(1)因为1994>1000,所以先让1994被1000代表的罗马数字表示,记为:M,然后1994-1000变为994;
(2)994>900,所以让994被900表示,记为CM,然后994-900=94;
......同理,每次都用最大的数字代表的罗马字符表示。
最后就可以实现"MCMXCIV"
具体代码:
string intToRoman(int num) {
//定义int类型和string类型的数组,用来存放提前量
int nums[] = { 1000,900,500,400,100,90,50,40,10,9,5,4,1 };
string strs[] = { "M","CM","D" ,"CD" ,"C" ,"XC" ,"L" ,"XL" ,"X" ,"IX" ,"V" ,"IV" ,"I" };
string res;//定义一个放最后答案的string
for (int i = 0; i < 13; i++)//遍历数组,从0-12
{
//当这个num大于某一个num[i]的时候,就进行运算,小于之后,就进行下一个for循环。
while (num >= nums[i])
{
num = num - nums[i];
res = res + strs[i];
}
}
return res;
}