LeetCode Integer to Roman(数字转罗马)

时间:2021-03-28 09:50:29

题意:给出一个1到3999之间的数,求其罗马的表示法

思路:罗马数字中I(1), V(5), X(10), L(50), C(100), D(500),M(1000)

记数规则为:

(1)相同的数字连写,所表示的数等于这些数字相加得到的数

(2)小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数

(3)小的数字(限于I,X和C)在大的数字的左边,所表示的数等于大数减小数得到的数

(4)在一个数的上面画一条横线,表示这个数增值1000倍

代码如下:

public class Solution
{
public String intToRoman(int num)
{
int[] basenum = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
String[] baseStr = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};

StringBuilder sb = new StringBuilder();
int index = 0;
while (num > 0)
{
if (num >= basenum[index])
{
num -= basenum[index];
sb.append(baseStr[index]);
}
else
{
index++;
}
}

return sb.toString();
}
}