您的位置:首页 > 其它

LeetCode Integer to Roman

2015-11-05 11:07 288 查看
题目:

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;
}
}

注意此题与之前的一题,将罗马数字转化为十进制整数有点类似,可以考虑结合下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: