12. 整数转罗马数字
解法:
高端的食材往往只需要采用最朴素的烹饪方式 (doge)
class Solution {
public:
string intToRoman(int num) {
string ans="";
while(num > 0){
if(num >= 1000){
num -= 1000;
ans += "M";
}else if(num >= 900){
num -= 900;
ans += "CM";
}else if(num >= 500){
num -= 500;
ans += "D";
}else if(num >= 400){
num -= 400;
ans += "CD";
}else if(num >= 100){
num -= 100;
ans += "C";
}else if(num >= 90){
num -= 90;
ans += "XC";
}else if(num >= 50){
num -= 50;
ans += "L";
}else if(num >= 40){
num -= 40;
ans += "XL";
}else if(num >= 10){
num -= 10;
ans += "X";
}else if(num >= 9){
num -= 9;
ans += "IX";
}else if(num >= 5){
num -= 5;
ans += "V";
}else if(num >= 4){
num -= 4;
ans += "IV";
}else if(num >= 1){
num -= 1;
ans += "I";
}
}
return ans;
}
};
题解也很硬核:
第一种方法用了pair,思路一样,代码更简洁
const pair<int, string> valueSymbols[] = {
{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 roman;
for (const auto &[value, symbol] : valueSymbols) {
while (num >= value) {
num -= value;
roman += symbol;
}
if (num == 0) {
break;
}
}
return roman;
}
};
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/integer-to-roman/solution/zheng-shu-zhuan-luo-ma-shu-zi-by-leetcod-75rs/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
第二种方法把个、十、百、千对应的都列出来了
个:0,1,2,3,4,5,6,7,8,9
十:0,10,20,30,40,50,60,70,80,90
百:0,100,200,300,400,500,600,700,800,900
千:0,1000,2000,3000
num最大只到3999,所以千列到3000就可以了
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];
}
};