leetcode解题: Integer to Roman (12)

Given an integer, convert it to a roman numeral.

Input is guaranteed to be within the range from 1 to 3999.

解法1:

主要的思路是要先构造出来罗马数字中的“根”数。也就是说,除了那么1,5,10,50,100,500,1000的数字,还有那些需要特殊处理的,比如40.
然后得算法就简单了,就遍历一遍dict, 每当找出来一个比当前base小的数就计算出需要重复几遍,比如III。
然后更新base数值。
Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Solution {
public String intToRoman(int n) {
// Write your code here
String dict[] = new String[]{"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
int base[] = new int[]{1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
String res = "";
for (int i = 0; i < dict.length; i++) {
if (n >= base[i]) {
int count = n / base[i];
n = n % base[i];
for (int j = 0; j < count; j++) {
res += dict[i];
}
}
}
return res;
}
}