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

LeetCode二进制字符串相加问题:测试用例返回结果错误求助

二进制字符串相加问题的修复方案

问题分析

针对测试用例a='11'、b='1',你的代码返回'10'而非正确结果'100',核心问题出在结果十进制转二进制的循环逻辑:

  • 第二个while循环仅以resultdecimal!=0为条件,当resultdecimal被减至0后,剩余的低位未处理,导致遗漏末尾的0。
  • 未处理结果为0的边界情况(如a='0'、b='0'时会返回空字符串)。

错误触发的具体过程

当resultdecimal=4时:

  1. 第一个循环计算出powerdecimal=3(因为2^3=8>4,循环停止)。
  2. 进入第二个循环:
    • 第一次判断:4 >= 2^3?否 → powerdecimal减到2,resultstring加'0'。
    • 第二次判断:4 >=2^2?是 → resultdecimal变为0,powerdecimal减到1,resultstring加'1'。
    • 此时resultdecimal=0,循环直接终止,未处理powerdecimal=1和0的位,最终resultstring='01',反转后得到'10'。

修复后的代码

class Solution(object):
    def addBinary(self, a, b):
        adecimal = 0
        bdecimal = 0
        powera = 0
        powerb = 0
        # 二进制转十进制逻辑保留,这部分是正确的
        for x in a[::-1]:
            if x == '1':
                adecimal += 2 ** powera
            powera += 1
        for i in b[::-1]:
            if i == '1':
                bdecimal += 2 ** powerb
            powerb += 1
        resultdecimal = adecimal + bdecimal
        
        # 处理结果为0的边界情况
        if resultdecimal == 0:
            return '0'
            
        powerdecimal = 0
        resultstring = ''
        # 找到最高位的幂次
        while resultdecimal >= 2 ** powerdecimal:
            powerdecimal += 1
        # 调整为实际最高位的幂次(循环结束时powerdecimal多了1)
        powerdecimal -= 1
        
        # 循环条件改为powerdecimal >=0,确保所有位都被处理
        while powerdecimal >= 0:
            if resultdecimal >= 2 ** powerdecimal:
                resultdecimal -= 2 ** powerdecimal
                resultstring += '1'
            else:
                resultstring += '0'
            powerdecimal -= 1
        
        return resultstring

关键修改点

  1. 新增边界处理:当resultdecimal=0时直接返回'0',避免空字符串。
  2. 调整最高位幂次:第一个循环结束后,powerdecimal多了1,减1回到实际最高位的幂次(比如4的最高位是2^2,所以powerdecimal应设为2而非3)。
  3. 修改循环条件:将第二个循环的条件改为powerdecimal >=0,确保从最高位到最低位(2^0)的每一位都被处理,不会遗漏任何位。

测试a='11'、b='1'时:

  • resultdecimal=4,调整后powerdecimal=2。
  • 处理2^2:4>=4 → 减4,resultstring加'1',powerdecimal=1。
  • 处理2^1:0>=2?否 → 加'0',powerdecimal=0。
  • 处理2^0:0>=1?否 → 加'0',powerdecimal=-1,循环结束。
  • 最终resultstring='100',返回正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 05:44:50