You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode Roman to Integer:if语句逻辑异常排查

罗马数字转整数if逻辑失效问题排查

代码存在5处核心逻辑错误,直接导致判断不生效、结果异常:

  • 笔误导致减法判断永远无法触发:三个特殊减法判断的第二个条件全部写错,将下一位索引j+1误写为当前索引j,比如I的判断分支里写了romanNum[j]=="I" and romanNum[j]=="X",相当于要求同一个位置的字符同时是I和X,条件永远不成立,X、C对应的判断分支也存在完全相同的笔误。
  • 存在索引越界风险:内层循环j的遍历范围是range(len(romanNum)),当j取到字符串最后一位的索引时,访问romanNum[j+1]会直接触发索引越界报错。
  • 规则记忆错误:不存在「X位于V之前时计算结果减2」的规则,罗马数字合法的减法组合仅6种:IV(4)、IX(9)、XL(40)、XC(90)、CD(400)、CM(900),XV对应数值15,按正常加法计算即可。
  • 双重循环逻辑冗余:外层遍历映射表、内层遍历字符串的写法会做大量无效遍历,时间复杂度是O(7n),完全没必要,单次遍历字符串即可完成计算。
  • 类方法写法不规范:定义的roman_numeral方法缺少@staticmethod装饰器,直接通过类调用属于不规范写法。

修正后可运行代码

提供两种实现思路,第一种保留原代码「先全加、遇到特殊组合减差值」的设计,第二种是更简洁的通用判断逻辑:

思路1:保留原代码逻辑修正错误

class Solutions:
    @staticmethod
    def roman_numeral(romanNum):
        value = {"I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000}
        result = 0
        str_len = len(romanNum)
        # 先遍历所有字符累加总值
        for char in romanNum:
            result += value[char]
        # 遍历判断特殊减法组合,j最多取到倒数第二位,避免越界
        for j in range(str_len - 1):
            curr = romanNum[j]
            next_char = romanNum[j+1]
            if (curr == "I" and next_char in ("V", "X")):
                result -= 2
            if (curr == "X" and next_char in ("L", "C")):
                result -= 20
            if (curr == "C" and next_char in ("D", "M")):
                result -= 200
        return result

print(Solutions.roman_numeral("MCMXCIV"))
# 输出正确结果1994

思路2:更简洁的通用实现(无需硬编码差值)

class Solutions:
    @staticmethod
    def roman_numeral(romanNum):
        value = {"I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000}
        result = 0
        str_len = len(romanNum)
        for j in range(str_len):
            # 不是最后一位,且当前值小于下一位值时减当前值,否则加当前值
            if j < str_len - 1 and value[romanNum[j]] < value[romanNum[j+1]]:
                result -= value[romanNum[j]]
            else:
                result += value[romanNum[j]]
        return result

print(Solutions.roman_numeral("MCMXCIV"))
# 输出正确结果1994

内容的提问来源于stack exchange,提问作者Azizur Rahaman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 17:54:27