整数转罗马数字代码仅支持到1010、新增判断触发超时如何解决
问题排查与解决
超时原因
- 核心诱因是你混淆了
numerals字典的键值对应关系:字典的键是整数,值是罗马字符,你把两者搞反后,拿字符串类型的罗马字符和整数做大小比较:- Python3环境下会直接抛出类型不支持比较的错误
- Python2环境允许跨类型比较,判断结果会固定为真或假,直接导致循环无法正常退出,持续运行就触发了超时错误
- 你额外新增的
if num < v逻辑完全多余,原代码的倒序遍历+while结构本身可以自动处理循环跳出,不需要额外加判断逻辑。
修复方案
你不需要新增额外的if判断,只要把键值的对应关系捋顺即可,修复后的代码可正确处理13999范围内的整数转罗马数字(标准罗马数字的常规表示范围就是13999,超出范围的需要用上划线扩展规则,不在常规需求范围内):
class Solution: def intToRoman(self, num: int) -> str: numerals = { 1: "I", 4: "IV", 5: "V", 10: "X", 40: "XL", 50: "L", 90: "XC", 100: "C", 400: "CD", 500: "D", 900: "CM", 1000: "M" } output = "" # 明确变量名:int_val为整数值,roman_char为对应罗马字符 for int_val, roman_char in sorted(numerals.items(), reverse=True): while num >= int_val: output += roman_char num -= int_val return output
如果需要处理大于3999的数值,可在函数入口处加范围校验,超出范围直接返回提示或按扩展规则处理即可,不要在循环中添加多余的判断逻辑。
内容的提问来源于stack exchange,提问作者Jake
相关产品推荐
相关产品推荐

