力扣(LeetCode) 67: 二进制求和 - 解法思路

问题概述

给定两个二进制字符串 ab,返回它们的和作为二进制字符串。

解法 1:简单方法

工作原理

从右到左(从最低位到最高位)处理数字,添加对应数字并处理进位:

python 复制代码
class Solution:
    def addBinary(self, a, b):
        result = []
        carry = 0
        i = len(a) - 1
        j = len(b) - 1
        
        while i >= 0 or j >= 0 or carry:
            total = carry
            
            if i >= 0:
                total += int(a[i])
                i -= 1
            if j >= 0:
                total += int(b[j])
                j -= 1
            
            result.append(str(total % 2))
            carry = total // 2
        
        return ''.join(reversed(result))

复杂度分析

  • 时间复杂度: O(max(m, n)) - 每个数字处理一次
  • 空间复杂度: O(max(m, n)) - 用于结果字符串

何时使用

  • 易于理解和实现
  • 适合学习算法逻辑
  • 处理所有情况,包括进位传播

解法 2:内置函数(推荐)

工作原理

使用 Python 的内置函数 int()bin() 将二进制字符串转换为整数,相加后再转换回二进制:

  • int(x, 2) : 将二进制字符串 x 转换为整数。第二个参数 2 指定基数为 2(二进制)。
  • bin(x) : 将整数 x 转换为带 '0b' 前缀的二进制字符串。我们使用切片 [2:] 来移除前缀。
python 复制代码
class Solution:
    def addBinary(self, a, b):
        x = bin(int(a, 2) + int(b, 2))
        return x[2:]

复杂度分析

  • 时间复杂度 : O(max(m, n)) - int(x, 2) 为 O(n),其中 n 为字符串长度;bin(x) 为 O(n),其中 n 为二进制字符串长度
  • 空间复杂度: O(max(m, n)) - 用于结果字符串

何时使用

  • 推荐 - 最快且最简洁
  • 利用高度优化的 C 实现
  • 由于优化的内置函数,实际性能最佳

对比

方法 时间 空间 最佳适用
简单方法 O(max(m,n)) O(max(m,n)) 逻辑清晰,易于理解
内置函数 O(max(m,n)) O(max(m,n)) 性能最佳,代码最简洁

总结

关键是从右到左处理数字,添加对应数字并传播进位。进位可以是 0 或 1,我们继续处理直到两个字符串都处理完毕且没有剩余进位。解法 1 手动实现,逻辑清晰;解法 2 利用 Python 优化的内置函数,性能最佳。两种解法都实现了 O(max(m, n)) 的时间复杂度和空间复杂度。

相关推荐
rannn_1114 小时前
【力扣hot100】链表专题|160、206、234、141、142
java·算法·leetcode·链表·面试·开发
数模竞赛Paid answer4 小时前
2026年华东杯数学建模B题医药物流安排问题解题全过程文档及程序
算法·数学建模·数据分析·华东杯
leisoo80974 小时前
100GBA股股票数据怎么存ClickHouseRedisMySQLJSON完整对比
大数据·linux·服务器·开发语言·python
WangYan20224 小时前
基于XGBoost与AI的生态—地学多源数据建模:植被与土地利用识别、土壤碳氮空间预测、生物多样性驱动机制、土壤微生物功能预测、生态退化与风险识别
python·机器学习·xgboost
不会代码的小猴4 小时前
21. 泛型编程上
开发语言·c++·笔记·算法
营养充电站5 小时前
VS Code Git 工作树:解锁多分支并行开发的高效体验
leetcode·决策树·逻辑回归·散列表·模拟退火算法
AI备案指南-满满5 小时前
大模型与算法备案全流程详解:从零到通过的完整指南
人工智能·算法·备案·大模型备案·算法备案
江畔柳前堤5 小时前
LLM 训练核心机制深度解析:Warmup、Cosine Decay 与 Perplexity 的完整知识体系
网络·人工智能·深度学习·算法·机器学习·语音识别
一只旭宝5 小时前
细讲C加加【9】C++ std::function与std::bind详解|仿函数、绑定器、类成员绑定、占位符、成员偏移指针
开发语言·c++·算法
良木林6 小时前
子串 - LeetCode hot 100
算法·leetcode·职场和发展