12. Integer to Roman
LeetcodeGiven an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
class Solution:
def intToRoman(self, num):
"""
:type num: int
:rtype: str
"""
values = [ 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 ]
numerals = [ "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" ]
ret = ''
for i in range(0, len(values)):
while num >= values[i]:
num -= values[i]
ret += numerals[i]
return ret
分析¶
罗马数字的计数方法:
罗马字符 I V X L C D M
整数数字 1 5 10 50 100 500 1000
- 相同的数字连写,所表示的数等于这些数字相加得到的数,例如:III = 3
- 小的数字在大的数字右边,所表示的数等于这些数字相加得到的数,例如:VIII = 8
- 小的数字,限于(I、X和C)在大的数字左边,所表示的数等于大数减去小数所得的数,例如:IV = 4
- 正常使用时,连续的数字重复不得超过三次
- 在一个数的上面画横线,表示这个数扩大1000倍(本题只考虑3999以内的数,所以用不到这条规则)
罗马数字可以分为1、4、5、9这四种构成方式,而1-3999中,共有1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1,共计13种,依次分别对应"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I",即:
整数数字 1000 900 500 400 100 90 50 40 10 9 5 4 1
罗马数字 M CM D CD C XC L XL X IX V IV I