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)

相关推荐
让学习成为一种生活方式1 分钟前
黄花蒿LHC基因家族的串联重复驱动扩张及其UV-B胁迫适应性--BMC Plant Biology
人工智能·算法·机器学习
ECT-OS-JiuHuaShan10 分钟前
共轭互逆链路论,彻底打击庸俗辩证法和不可知论
数据库·人工智能·算法·机器学习·数学建模
吴声子夜歌10 分钟前
Java面试——Flink原理及应用(二)
java·面试·flink
薛定e的猫咪12 分钟前
【大模型量化】使用 llama.cpp 完成量化、本地推理与服务化部署
人工智能·深度学习·算法·llama
薛定e的猫咪17 分钟前
【源码解读版】ContraBAR:用 CPC 对比学习替代变分推断做贝叶斯元 RL
人工智能·深度学习·学习·算法·机器学习
小江的记录本21 分钟前
【ORM 框架】MyBatis-Plus 核心特性、条件构造器、分页插件、乐观锁插件(附《思维导图》、《问题排查与实践清单》和《面试高频考点汇总》)
java·windows·spring boot·python·spring·面试·mybatis
_明月44 分钟前
汇川技术股份有限公司面试--Java外包岗
java·面试·职场和发展
水管在开花.1 小时前
RAG:知识库问答系统教学②-零基础保姆级教程
人工智能·面试·agent·rag
绿算技术1 小时前
大模型本地化的经济账:DeepSeek V4 Flash 部署实测
人工智能·科技·算法·spark
翟天保Steven1 小时前
用于提升CBCT低对比度组织分辨率的三维图像后处理方法
算法·计算机视觉·图像重建·图像后处理