leetcode 67. 二进制求和

  1. 二进制求和
    已解答
    简单
    相关标签
    相关企业
    给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。

示例 1:

输入:a = "11", b = "1"

输出:"100"

示例 2:

输入:a = "1010", b = "1011"

输出:"10101"

提示:

1 <= a.length, b.length <= 104

a 和 b 仅由字符 '0' 或 '1' 组成

字符串如果不是 "0" ,就不含前导零

解题思路

将两字符串倒置,依次进行相加,遇到二进位。

cpp 复制代码
class Solution {
public:
    string addBinary(string a, string b) {
        string answer;
        reverse(a.begin(),a.end());
        reverse(b.begin(),b.end());
        int n = max(a.size(),b.size());
        int carry = 0; //进位值
        for(size_t i=0;i<n;i++)
        {
            /*根据当前位置 i 的字符值来更新 carry(进位)
            如果超出字符串的长度填充0,如果没超出等于一就返回1,
            不等于1就是0
            */
            carry += ( i<a.size() ? (a.at(i)=='1') : 0 );
            carry += (i < b.size() ? (b.at(i)=='1') : 0 );
            answer.push_back( (carry % 2) ? '1' : '0');
            carry /=  2; 
            /* carry /=  2; 这一操作更新 carry,决定是否有进位需要带到下一位的计算中。例如,当 carry 为 2 或 3 时,需要产生进位 1,因此 carry /= 2 的结果为 1,即将进位传递给下一位。*/
        }

        if(carry)
        {
            //如果还有进位,插入1.
            answer.push_back('1');
        }
        reverse(answer.begin(),answer.end());//-逆序
        return answer;
    }
};
相关推荐
可编程芯片开发29 分钟前
基于模糊PID控制的六步逆变器供电无刷直流电机调速simulink仿真
算法
imperialeast1 小时前
WinAXP音乐播放器8月4日更新
windows·算法·ui
ZhouDevin1 小时前
算法论文/模型微调1——CNN架构做lora微调训练
人工智能·深度学习·算法·架构·cnn
小月土星1 小时前
LeetCode 21. 合并两个有序链表 超详细题解(虚拟头结点 + 逐行代码拆解)
算法
oier_Asad.Chen1 小时前
【OI学习笔记】Floyed-Warshall算法解决传递闭包问题
c++·笔记·学习·算法·图论·最短路·传递闭包
国科安芯1 小时前
卫星星务计算机数据管理中SEU容错机制的技术实现研究——以AS32S601存储器ECC架构为例
网络·单片机·算法·fpga开发·架构·云计算·risc-v
孙启超1 小时前
【AI应用开发】Agent 无限 loop(反复调用同一个工具)如何规避?
人工智能·python·算法·llm·agent·loop·ai应用开发
小月土星2 小时前
LeetCode 142. 环形链表 II 超详细题解(快慢指针原理+逐行代码拆解)
算法
dok122 小时前
Johannes 《Linux内核模块与设备驱动开发:编写Linux驱动程序》 (11)kmalloc 动态内存分配和struct file中的私有数据
linux·驱动开发·算法
hansang_IR2 小时前
【题解】[COCI 2024/2025 #2] 流明 / Blistavost
c++·算法·动态规划·dp