【每日一题】LeetCode. 67. 二进制求和

每日一题,防止痴呆 = =

一、题目大意

给你两个二进制字符串,返回它们的和(用二进制表示)。

输入为 非空 字符串且只包含数字 1 和 0。
在这里插入图片描述
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-binary

二、题目思路以及AC代码

思路

这题思路无非就是两种,一种是转化为十进制数,直接利用加法去做,当然这里给定二进制数长度最大时10000,所以可能需要利用大数加法来做。另一种就是直接模拟进行加法。

这里我是直接模拟来做的,直接设立指针从最后开始往前加和即可,详细见代码,双百pass。

AC代码
class Solution {
public:
    string addBinary(string a, string b) {
        string res;

        int carry = 0;
        int pa = a.length() - 1;
        int pb = b.length() - 1;

        int num_a, num_b;
        while (pa >= 0 || pb >= 0) {
            num_a = pa>=0?a[pa]-'0':0;
            num_b = pb>=0?b[pb]-'0':0;

            int temp = num_a + num_b + carry;
            res += (temp & 1) + '0';
            carry = (temp & 2) >> 1;
            pa--;
            pb--;
        }        

        if (carry) res += "1";
        reverse(res.begin(), res.end());

        return res;
    }
};

如果有问题,欢迎大家指正!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章