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

罗马数字转整数代码仅处理前两元素,求和异常问题排查

问题分析与修复

你的代码只处理前两个元素就终止,核心原因是**return sum被放在了for循环内部**——第一次循环执行到这里就直接返回结果,循环根本没机会继续遍历后续字符。除此之外,代码还有其他几个致命问题:

存在的问题列表

  • return sum在for循环内,导致循环仅执行一次就结束
  • 使用S.index(i)获取索引逻辑错误:如果字符串中有重复字符(比如"III"),index(i)只会返回该字符第一次出现的位置,后续循环会拿错索引
  • sum不是累加操作,每次循环都会被直接覆盖成当前两个字符的计算结果,完全没累积之前的数值
  • 未处理字符串最后一个字符的边界情况:当i是最后一个字符时,S[S.index(i)+1]会触发索引越界错误

修复后的代码

class Solution(object):
    def romanToInt(self, S):
        roman = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
        total = 0
        n = len(S)
        for i in range(n):
            # 当前字符值小于下一个时,减去当前值;否则加上当前值
            if i < n - 1 and roman[S[i]] < roman[S[i+1]]:
                total -= roman[S[i]]
            else:
                total += roman[S[i]]
        return total

修复说明

  1. 将return移到循环外部,确保整个字符串都被遍历完成
  2. 用range(len(S))直接获取索引,避免重复字符导致的索引错误
  3. 用total变量做累加/累减操作,正确累积最终结果
  4. 增加i < n - 1的判断,避免最后一个字符访问下一个索引时出现越界

内容的提问来源于stack exchange,提问作者Ahmad Altom

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:40:57