【每日一題】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;
    }
};

如果有問題,歡迎大家指正!!!

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