Python实现最小多米诺旋转:代码异常求问题排查
多米诺旋转问题代码错误分析
你的代码存在以下几类关键错误,导致无法得到正确结果:
遍历索引使用错误:
在for i in top和for i in bottom循环中,i是列表的元素值而非索引,但后续代码却用top[i]、bottom[i]来取值,这会导致严重的索引越界或取值错误。例如示例输入中top包含元素6,执行top[i]时会尝试访问top[6],但列表长度仅为6,合法索引是0-5,直接触发索引错误。最高频元素统计逻辑错误:
- 每次循环调用
top.count(i)会重复统计,时间复杂度高达O(n²),效率极低; - 当多个元素频率相同时,无法正确锁定目标值;
- 核心逻辑错误:要让某一行全为同一个数字,这个数字必须在每一对多米诺的上下至少出现一次,而不是仅看单行的最高频元素。比如示例中,虽然上行最高频是2,但你需要确认每个位置的上行或下行都有2,才能通过翻转实现,原代码完全忽略了这个前提。
- 每次循环调用
提前return导致逻辑中断:
在翻转计数的循环中,第一次遇到需要翻转的元素就执行return counter,直接终止函数,无法完成完整的次数统计。而且return counter之后的if判断代码永远不会被执行,完全失去了判断任务是否可行的作用。语法与缩进错误:
if bottom[i] != num_t和if top[i] != num_b语句末尾缺少冒号:;- 判断任务是否可行的
if语句被放在return之后,完全无法执行; - 翻转逻辑中修改原列表的操作没有意义,且会污染输入参数。
边界情况未处理:
当上行和下行的最高频元素频率相等时(counter_t == counter_b),代码没有任何处理逻辑,函数会默认返回None,不符合题目要求的返回-1或有效次数。
内容的提问来源于stack exchange,提问作者Jerry Cohen
相关产品推荐
相关产品推荐

