LeetCode12 整数转罗马数字 Python3

1、自己的想法,存储部分表达方式,直接拿过来用

1-10,10-100,100-1000,1000-3000

class Solution:
    def intToRoman(self, num: int) -> str:
        stor1=['I','II','III','IV','V','VI','VII','VIII','IX','X']
        stor2=['X','XX','XXX','XL','L','LX','LXX','LXXX','XC','C']
        stor3=['C','CC','CCC','CD','D','DC','DCC','DCCC','CM','M']
        stor4=['M','MM','MMM']
        result=[]
        while(num > 0):
            if(num >= 1000):
                ind = num//1000
                result.append(stor4[ind-1])
                num = num % 1000
            elif(num >= 100):
                ind = num//100
                result.append(stor3[ind-1])
                num = num % 100
            elif(num >= 10):
                ind = num//10
                result.append(stor2[ind-1])
                num = num % 10
            else:
                result.append(stor1[num-1])
                num = 0

        return "".join(result)
            

优化:

class Solution:
    def intToRoman(self, num: int) -> str:
        stor1=['','I','II','III','IV','V','VI','VII','VIII','IX','X']
        stor2=['','X','XX','XXX','XL','L','LX','LXX','LXXX','XC','C']
        stor3=['','C','CC','CCC','CD','D','DC','DCC','DCCC','CM','M']
        stor4=['','M','MM','MMM']

        result = stor4[num//1000] + stor3[(num%1000)//100] + stor2[(num%100)//10] + stor1[num%10]

        return result
            

2、官方的贪心算法

由大到小进行排查,顺便学习一下代码

class Solution:
    def intToRoman(self, num: int) -> str:
        # List中为元组
        NumSymbols=[(1000,'M'),(900,'CM'),(500, "D"), (400, "CD"), (100, "C"), (90, "XC"), 
        (50, "L"), (40, "XL"), (10, "X"), (9, "IX"), (5, "V"), (4, "IV"), (1, "I")]
        result=[]


        # 取出元组的内容
        for value, symbol in NumSymbols:
            if(num == 0):
                break
            # divmod() 把除数和余数运算结果结合起来 count=num//value  num=num%value
            count, num = divmod(num, value)
            result.append(symbol*count)

        return "".join(result)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值