题目:
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
题意:
就是给定一个整数,将其转化为一个罗马数字。其中确保这个整数是在1到3999的范围内。因为看罗马数字的定义,发现其实如果罗马数字比较大,那么就会出现很复杂的表示形式,所以一般只要确保在1到3999之内就行了。然后这道题的思路采用了一个非常巧妙的解题步骤。因为根据罗马数字的定义格式,
1~9: {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
10~90: {"X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
100~900: {"C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
1000~3000: {"M", "MM", "MMM"}.
那么在3999之内的任何数字的每一位就是在上述四个集合内的合并就行了。所以只要用一个循环去用10去初余就行了,每一次得到一位数字,然后去上面对应的数组中找到对应的字符就行了。
public class Solution
{
public static String intToRoman(int num)
{
String[][] roman =
{
{"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"},
{"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"},
{"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"},
{"", "M", "MM", "MMM"}
};
String ret = "";
int digit = 0;
while(num != 0)
{
int remain = num % 10;
ret = roman[digit][remain] + ret;
digit++;
num /= 10;
}
return ret;
}
}
注意此题与之前的一题,将罗马数字转化为十进制整数有点类似,可以考虑结合下。