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

你可能感兴趣的:(LeetCode,leetcode,算法,职场和发展)