【LeetCode】67. 二进制求和

67. 二进制求和(简单)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

思路

  • 这道题很简单,和415. 字符串相加 是一样的思路。
  • 首先对较短的字符串前面补 0 ,保证两个字符串长度一致;
  • 接着对两个字符串从右到左将对应位置的数字相加 (从右到左,也就是下标要从最大值 -> 0) ,当然,如果上一个位置发生了进位,在这个结果上还需要+1 ; 如果得到的数字 >= 2 ,说明该位置发生了进位,那么这个位置上的数字对 2 取余,并且将进位值 add 标记为 1 。
  • 最后,还需要单独考虑最高位是否发生了进位,同样地,如果发生了进位,在这个结果上还需要+1
  • 最终结果需要将字符串 ans 进行翻转

代码

class Solution {
public:
    string addBinary(string a, string b) {
        string ans;
        // 使得a一定是较长的字符串
        if(a.size() < b.size()) swap(a, b);
        int len_a = a.size(), len_b = b.size();

        // 对较短的字符串补0
        for(int i=len_b; i<len_a; ++i){
            b = "0" + b;
        }

        int add = 0; // 进位
        // 对应位置的数字相加
        for(int i=len_a-1; i>=0; --i){
            int temp = a[i] - '0' + b[i] - '0' + add;
            add = 0;
            // 需要进位
            if(temp >= 2){
                temp = temp % 2;
                add = 1;
            }
            ans.push_back(temp + '0');
        }
        if(add) ans.push_back('1');
        reverse(ans.begin(), ans.end());
        return ans;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值