leetcode(12) integer to roman 解法:

Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999.

解法:

参考:http://www.cnblogs.com/grandyang/p/4123374.html

转换法则如下:

基本字符 I V X L C D M
相应的阿拉伯数字表示为 1 5 10 50 100 500 1000

例如整数 1437 的罗马数字为 MCDXXXVII, 我们不难发现,千位,百位,十位和个位上的数分别用罗马数字表示了。 1000 – M, 400 – CD, 30 – XXX, 7 – VII。

所以我们要做的就是用取商法分别提取各个位上的数字,然后分别表示出来:

100 – C

200 – CC

300 – CCC

400 – CD

500 – D

600 – DC

700 – DCC

800 – DCCC

900 – CM

我们可以分为四类,100到300一类,400一类,500到800一类,900最后一类。每一位上的情况都是类似的,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class :
def intToRoman(self, num):
"""
:type num: int
:rtype: str
"""
roman = ['M', 'D', 'C', 'L', 'X', 'V', 'I'];
value = [1000, 500, 100, 50, 10, 5, 1];
i = 0;
res = "";
while(i<=6):
x = int(num /value[i]);
if(x < 4):
for j in range(x):
res += roman[i];
elif(x == 4):
res += (roman[i] +roman[i-1]);
elif( x > 4 and x < 9):
res += roman[i - 1];
for j in range(x - 5):
res += roman[i];
else:
res += roman[i] + roman[i-2];
num %= value[i];
i+=2;
return res;