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)

相关推荐
codists13 分钟前
《算法导论(第4版)》阅读笔记:p14-p16
算法
zilpher_wang38 分钟前
K-means
算法·机器学习·kmeans
柃歌41 分钟前
【LeetCode Solutions】LeetCode 176 ~ 180 题解
数据结构·数据库·sql·算法·leetcode
袁气满满~_~44 分钟前
LeetCode:101、对称二叉树
算法·leetcode·职场和发展
How_doyou_do1 小时前
Dijkstra
算法
赵和范1 小时前
C++:书架
开发语言·c++·算法
tmiger2 小时前
图像匹配导航定位技术 第 10 章
人工智能·算法·计算机视觉
wuxiguala2 小时前
【文件系统—散列结构文件】
linux·算法
keepDXRcuriosity2 小时前
深入探索快速排序算法:原理与 C 语言实现
c语言·算法·排序算法
flying_13143 小时前
面试常问系列(一)-神经网络参数初始化-之-softmax
深度学习·神经网络·算法·机器学习·面试