这个题目错了两次,第一次是因为对于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