LeetCode13罗马转整数场景下for循环range步长异常运行问题
罗马数字转整数代码循环问题成因分析
1. 内层循环索引固定为1的直接原因
Python的range(start, stop, step)遵循左闭右开的生成规则:仅包含满足start ≤ 数值 < stop的整数,每次累加步长后如果结果≥stop就停止生成。
你测试用例字符串为"III",长度为3,内层循环定义为range(1, len(s), 2),等价于range(1, 3, 2),计算得生成的序列仅包含[1],因此每次进入内层循环只会返回索引1。
2. 多次出现索引1的根本原因
你写的是两层嵌套for循环,外层循环range(0, 3, 2)会生成[0,2]两个值,会触发两次内层循环:
- 第一次外层循环cind=0时,进入内层循环,遍历得到cind2=1,打印
loop2 1 - 第二次外层循环cind=2时,内层循环的
range会重新初始化,不会继承上一次遍历的位置,因此还是得到cind2=1,再次打印loop2 1
这就是你观察到“第二次循环仍返回索引1”的原因。
额外逻辑问题提示
你当前的嵌套循环逻辑不符合罗马数字的遍历规则:会出现后位索引和前位索引重复配对的问题(比如测试用例中会把s[2]和s[1]配对),无法得到正确结果。建议调整为单循环遍历:每次判断当前位和下一位的组合是否属于特殊罗马组合,是则累加组合值、步进2位,否则累加当前位值、步进1位即可。
内容的提问来源于stack exchange,提问作者Louise Bilous
相关产品推荐
相关产品推荐

