【Leetcode-python】12. Integer to Roman(整数转化为罗马数字)

题目:给定一个整数,将其转换为罗马数字。 输入保证在1到3999的范围内。罗马数字是由七个不同的符号来表示: IVXLCDM。对应关系如下:

罗马数字的构造规则:

  • 2用罗马数字写成II,是两个1加在一起。 12写为XII,简称为X + II。 第二十七号写成XXVII,即XX + V + II。
  • 罗马数字通常从左到右由最大到最小。 但是,4不是IIII。 而是IV。因为4是5前面的一个数字。 同样的原则适用于9,即IX。 有六个使用减法的实例:可以I放在V(5)和X(10)之前制作4和9。X可以放在L(50)和C(100)之前,以产生40和90。C可以放在D(500)和M(1000)之前,以产生400和900。

例子如下:

  1. Example 1:  Input: 3 Output: "III"
  2. Example 2:  Input: 4 Output: "IV"
  3. Example 3:  Input: 9 Output: "IX"
  4. Example 4:  Input: 58 Output: "LVIII"   Explanation: L = 50, V = 5, III = 3.
  5. Example 5:  Input: 1994 Output: "MCMXCIV"  Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.

思路:首先可以将罗马数字的七个不同符号存储在字典中,我们可以通过不断进行除法,取余……来获取整数对应的数字。例如1632,先1232=1*1000+1*500+1*100+0*50+3*10+2*1,所以罗马数字为MDCXXXII。但是对于特殊情况,存在400,40,4的这种情况,不是直接输出4个100,4个10,4个1,所以我们可以将特殊情况存在另一个字典里,直接取出对应的特殊情况添加到输出的罗马字符串中。此外,对于特殊情况900,90,9 这类不能写成500+?,50+?,5+?,所以不能对500,50,5进行整除。

代码实现如下:

class Solution:
    def intToRoman(self, num: int) -> str:
        s=''  
        doc={1000:'M',500:'D',100:'C',50:'L',10:'X',5:'V',1:'I'}
        doc2={4:'IV',9:'IX',40:'XL',90:'XC',400:'CD',900:'CM'}
        for key in doc:
            if (num>=900 and num<1000) or (num>=90 and num<100) or (num==9):
                if key in [500,50,5]:
                    continue
            q=num//key
            if q!=0:            
                num=num%key
                if q*key in doc2:
                    s+=doc2[q*key]
                else:
                    for i in range(q):
                        s+=doc[key] 
        return s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值