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.
题意:将一个整数转化成罗马数字。输入的数字在1-3999的范围
思路:罗马数字共有七个,即I(1),V(5),X(10),L(50),C(100),D(500),M(1000)。按照下面的规则可以表示任意正整数:罗马数字遵循右加左减:在一个较大的罗马数字的右边记上一个较小的罗马数字,表示大数字加小数字。在一个较大的数字的左边记上一个较小的罗马数字,表示大数字减小数字。但是,左减不能跨越等级。比如,99不可以用IC表示,用XCIX表示。所以对于一个数,我们可以找到比该数小且最接近这个数的数,然后依次往上加。
1 class Solution: 2 def intToRoman(self,num): 3 a = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1] #阿拉伯数字 4 b = ['M','CM','D','CD','C','XC','L','XL','X','IX','V','IV','I'] #对应的罗马数字 5 list = '' #存放输出结果 6 for i in range(0, len(a)): #a从左到右遍历 7 while num >= a[i]: #找到比输入的数小且最接近的数 8 num -= a[i] #输出该罗马数字位并从原数中减掉该数 9 list += b[i] 10 return list 11 if __name__=='__main__': 12 solution = Solution() 13 num = 99 14 print(solution.intToRoman(num))