LeetCode 面试经典150题 67.二进制求和

415.字符串相加 思路一模一样

题目 :给你两个二进制字符串 ab ,以二进制字符串的形式返回它们的和。

eg: 输入a="1010" b="1011" 输出"10101"

思路:从右开始遍历两个字符串,因为右边是低位先运算。如果其中一个字符串遍历完就补0。

while (i >= 0 || j >= 0 || carry != 0) 中 carry != 0 主要是解决最后有进位的情况,特别注意!

最后记得把字符串反转,因为先把低位运算结果存储起来了。

代码

java 复制代码
class Solution {
    public String addBinary(String a, String b) {
        StringBuilder res =  new StringBuilder(); // 要返回的结果
        int i = a.length() - 1;
        int j = b.length() - 1;
        int carry  = 0; // 进位
        while (i >= 0 || j >= 0 || carry != 0) {
            int digitA = i >= 0 ? a.charAt(i) - '0' : 0;  // 当前a的取值
            int digitB = j >= 0 ? b.charAt(j) - '0' : 0;  // 当前b的取值
            int sum = digitA + digitB + carry;  // 当前位置相加的结果
            carry = sum >= 2 ? 1 : 0;
            sum = sum % 2;
            res.append(sum);
            i--;
            j--;
        }
        return res.reverse().toString(); // 把结果反转并返回
    }
}

性能

时间复杂度O(max(M,N)M,N分别是字符串a b的长度)

空间复杂度O(1)

相关推荐
WolfGang0073215 分钟前
代码随想录算法训练营 Day17 | 二叉树 part07
算法
温九味闻醉7 分钟前
关于腾讯广告算法大赛2025项目分析1 - dataset.py
人工智能·算法·机器学习
炽烈小老头13 分钟前
【 每天学习一点算法 2026/03/23】数组中的第K个最大元素
学习·算法·排序算法
老鱼说AI22 分钟前
大规模并发处理器程序设计(PMPP)讲解(CUDA架构):第四期:计算架构与调度
c语言·深度学习·算法·架构·cuda
月落归舟26 分钟前
帮你从算法的角度来认识数组------( 二 )
数据结构·算法·数组
阿贵---42 分钟前
C++中的RAII技术深入
开发语言·c++·算法
NAGNIP1 小时前
面试官:深度学习中经典的优化算法都有哪些?
算法
PiKaMouse.1 小时前
navigation2-humble从零带读笔记第一篇:nav2_core
c++·算法·机器人
木井巳1 小时前
【递归算法】子集
java·算法·leetcode·决策树·深度优先
lightqjx2 小时前
【算法】二分算法
c++·算法·leetcode·二分算法·二分模板