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

LeetCode罗马数字转整数Python代码问题:部分测试用例未通过

代码问题排查
  • 致命赋值错误
    处理字符'M'时,代码写的是v2==1000——这是比较运算符,不是赋值操作,导致'M'对应的数值始终为0,所有包含M的测试用例都会计算错误。必须改成v2=1000。

  • 初始值的逻辑瑕疵
    变量vp初始化为0(整数类型),虽然第一次循环不会触发减法逻辑,但从类型一致性角度,更严谨的做法是初始化为None或空字符串,避免类型不匹配带来的意外问题。

  • 冗余代码
    return v之后的print(v)永远不会执行,属于无效代码,可直接删除。

  • 减法逻辑的优化建议
    你的减法逻辑(从后往前遍历,当前字符为I/X/C且前一个字符对应大数时减当前值)本身是正确的,但可以合并重复判断,让代码更简洁,比如把v1=='I' and vp=='V'和v1=='I' and vp=='X'合并为v1=='I' and (vp=='V' or vp=='X')。


修正后的代码示例

def romanToInt(s):
    l = len(s)
    v = 0
    a = -1
    vp = None  # 改为None保证类型一致
    while a >= -l:
        v1 = s[a]
        v2 = 0
        
        if v1 == 'I':
            v2 = 1
        elif v1 == 'V':
            v2 = 5
        elif v1 == 'X':
            v2 = 10
        elif v1 == 'L':
            v2 = 50
        elif v1 == 'C':
            v2 = 100
        elif v1 == 'D':
            v2 = 500
        elif v1 == 'M':
            v2 = 1000  # 修正赋值运算符
        else:
            print("unknown")
        
        # 优化减法逻辑判断
        if vp is not None:
            if v1 == 'I' and (vp == 'V' or vp == 'X'):
                v -= v2
            elif v1 == 'X' and (vp == 'L' or vp == 'C'):
                v -= v2
            elif v1 == 'C' and (vp == 'D' or vp == 'M'):
                v -= v2
            else:
                v += v2
        else:
            # 第一次循环直接累加当前值
            v += v2
        
        a -= 1
        vp = v1
    return v

更简洁的实现方式

用字典映射罗马字符与数值,结合反向遍历,代码可读性更高:

def romanToInt(s):
    roman_map = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}
    total = 0
    prev_val = 0
    # 反向遍历字符串,简化判断逻辑
    for char in reversed(s):
        current_val = roman_map[char]
        if current_val < prev_val:
            total -= current_val
        else:
            total += current_val
        prev_val = current_val
    return total

内容的提问来源于stack exchange,提问作者prahas nambiar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:15:16