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))

 

 

posted @ 2017-12-27 17:02  十二Zh  阅读(154)  评论(0)    收藏  举报