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/

猜你喜欢

转载自blog.csdn.net/qq_37466121/article/details/85270405