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)

相关推荐
楼田莉子21 分钟前
C++算法专题学习——分治
数据结构·c++·学习·算法·leetcode·排序算法
一支鱼38 分钟前
leetcode常用解题方案总结
前端·算法·leetcode
ulias2121 小时前
各种背包问题简述
数据结构·c++·算法·动态规划
m0_570466411 小时前
代码随想录算法训练营第二十八天 | 买卖股票的最佳实际、跳跃游戏、K次取反后最大化的数组和
java·开发语言·算法
吃着火锅x唱着歌1 小时前
LeetCode 1537.最大得分
算法·leetcode·职场和发展
数模加油站1 小时前
25高教社杯数模国赛【C题超高质量思路+可运行代码】第十弹
算法·数学建模·数模国赛·高教社杯全国大学生数学建模竞赛
零千叶1 小时前
【面试】RabbitMQ 常见问题
面试·职场和发展·rabbitmq
ulias2121 小时前
动态规划入门:从记忆化搜索到动态规划
算法·动态规划
山河君1 小时前
webrtc之语音活动上——VAD能量检测原理以及源码详解
算法·音视频·webrtc·信号处理
THMAIL2 小时前
深度学习从入门到精通 - LSTM与GRU深度剖析:破解长序列记忆遗忘困境
人工智能·python·深度学习·算法·机器学习·逻辑回归·lstm