罗马数字转整数代码仅处理前两元素,求和异常问题排查
问题分析与修复
你的代码只处理前两个元素就终止,核心原因是**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
修复说明
- 将
return移到循环外部,确保整个字符串都被遍历完成 - 用
range(len(S))直接获取索引,避免重复字符导致的索引错误 - 用
total变量做累加/累减操作,正确累积最终结果 - 增加
i < n - 1的判断,避免最后一个字符访问下一个索引时出现越界
内容的提问来源于stack exchange,提问作者Ahmad Altom
相关产品推荐
相关产品推荐

