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

LeetCode 2125题银行激光束数量求解代码未通过全部测试用例

问题排查与修复

核心问题

你代码里的遍历并直接修改原列表的逻辑存在bug:当你在for x in bank循环中调用bank.remove(x)时,列表长度会动态缩短,导致遍历过程跳过部分元素。比如连续出现两行全0的情况,第二行不会被检测到,最终留在列表中干扰后续计算。

举个典型场景:输入为["000", "000", "101", "110"],第一次循环移除第一个"000"后,列表变为["000", "101", "110"],此时循环会直接跳到第三个元素"101",跳过了剩余的"000"。后续计算时,这个未被移除的空行会插入在有效行之间,导致本该相邻的有效行无法正确相乘累加。

修复后的代码

不要直接修改原列表,而是生成一个新的过滤列表,只保留包含1的行:

class Solution:
    def numberOfBeams(self, bank: List[str]) -> int:
        # 生成过滤后的新列表,避免遍历修改原列表的问题
        filtered = [row for row in bank if row.count('1') > 0]
        res = 0
        # 直接遍历到倒数第二个元素,简化逻辑
        for i in range(len(filtered) - 1):
            res += filtered[i].count('1') * filtered[i+1].count('1')
        return res

额外优化(可选)

提前计算每行的1的数量,避免重复调用count('1'),提升效率:

class Solution:
    def numberOfBeams(self, bank: List[str]) -> int:
        # 先统计所有有效行的1的数量
        ones_counts = [row.count('1') for row in bank if row.count('1') > 0]
        res = 0
        for i in range(len(ones_counts) - 1):
            res += ones_counts[i] * ones_counts[i+1]
        return res

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 00:43:21