LeetCode 刷题笔记 12. 整数转罗马数字

这个题目错了两次,第一次是因为对于4,9,40,90,400,900的这几种特殊情况仅考虑了num等于他们的情况,加了个判断,如果num=上面这些值,就直接return对应的特殊字符串,但是忘记考虑的情况是,一个num中可以有40+90+1这样的情况等,也就是说4,,9,40,90,400,900这些数字和1,5,10,50……这些数字一样,也是组成部分,这样的话就把它们也加到num_to_rome字典里:

num_to_rome = {
            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',
        }

第二次错误是因为,写成了 num -= divide,正确的应该是num -= divide * (num // divide),这样的话就正确了,完整代码如下:

class Solution:
    def intToRoman(self, num: int) -> str:
        ans = ''
        num_to_rome = {
            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',
        }
        for divide in num_to_rome:
            if num // divide == 0:
                continue
            for i in range(num // divide):
                ans += num_to_rome[divide]
            num -= divide * (num // divide)
        return ans

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值