Integer to Roman
(原题链接:
点击打开链接)
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
Solution:
看到题目首先想到找规律了,后面也没找到什么规律,就这么粗暴地解了。这个方法比较接近于栈,压进去到4的时候再弹出来……
class Solution {
public:
string intToRoman(int num) {
if (num > 3999 || num < 1) return NULL;
string roman = "";
char symbol[8] = {'I','V','X','L','C','D','M'};
for (int b = 0; b < 4; b++)
{
for (int a = 1; a <= num/pow(10, 3 - b); a++)
{
if (a <= 3 || (a >= 6 && a <= 8)) roman += symbol[2 * (3 - b)];
else if (a == 4 || a == 5)
{
roman = roman.substr(0, roman.length() - 2);
roman += symbol[2 * (3 - b) + 1];
}
else
{
roman = roman.substr(0, roman.length() - 4);
roman = roman + symbol[2 * (3 - b)] + symbol[2 * (3 - b) + 2];
}
}
num = num % (int)pow(10, 3 - b);
}
return roman;
}
};
后面想到更粗暴的方法。emmmm....虽然空间占用比较多,可是比较快。
class Solution {
public:
string intToRoman(int num) {
string one[10] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
string ten[10] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
string hundred[10] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
string thousand[4] = {"", "M", "MM", "MMM"};
return thousand[num/1000] + hundred[(int)num/100%10] + ten[(int)num/10%10] + one[(int)num%10];
}
};