1. 程式人生 > >leetcode 67 Add Binary(二進位制字串相加)

leetcode 67 Add Binary(二進位制字串相加)

題目要求

給定兩個二進位制字串,返回其相加之後的和。
輸入字串都是非空的,只包含字元1或0。

解題思路

以前我們做過一道題,給數字加1:leetcode 66 plus one,其中討論了兩種情況,同樣的可以遷移到本題上,不同的是,這次我們處理的是二進位制,字串。

(1)首先 還是考慮進位的問題,二進位制,所以當和滿足2的時候就需要進位,在程式中,我們用和 除以2的形式來判斷是否需要進位。
(2)第二點不同就是,我們輸入的是字串,我們顯然要先將字元轉化為整數才方便進行運算操作, 在程式中用 - ’0‘ 來進行操作,進行轉換。
(3)根據以上兩點便可以進行程式碼書寫了,從最後一位開始遍歷,若一方位數不夠則用0進行填補(所以才有三目運算的寫法),每次運算的結果通過取餘數來得到。

主要程式碼 c++

class Solution {
public:
    string addBinary(string a, string b) {
        string res = "";
        int indexa = a.size() - 1;
        int indexb = b.size() - 1;
        int carry = 0; // 進位標識
        while(indexa>=0 || indexb>=0 || carry >0)
        {
            int elema = indexa>=
0 ? a[indexa--] - '0' : 0; int elemb = indexb>=0 ? b[indexb--] - '0' : 0; int sum = elema + elemb + carry; res = to_string(sum % 2) + res; carry = sum / 2; // 進位獲取方式 } return res; } };

原題連結:https://leetcode.com/problems/add-binary/