67. Add Binary

来源:互联网 发布:同济大学软件学院地址 编辑:程序博客网 时间:2024/06/16 00:14

Problem:

Given two binary strings, return their sum (also a binary string).

For example,
a = "11"
b = "1"
Return "100".


题意是给两个二进制的string,然后写一个函数返回两个string对应的二进制值的和。我的想法是:首先两个字符串长度不一样,所以得先把短的高位补全0。我的计算和的代码也比较长,计算按string的倒序计算。首先是把每一位的char值转成int值,设置一个flag来表示进位与否,flag=1是进位。然后把每一位相加。如果和是1或者0的话,表示没有进位,而且结果值对应位就是该和的值。如果和是2或者3的话,表示要进位,而且结果值对应位的值是和减去2的值。算完最后一位假如flag=1,表示还得进位,新加一位1。最后把值倒转过来就是结果了。

一拿到题就直接写,可能代码有点长,算法不够精简。可能大家有更短更简单的方法,可能用位逻辑可以?如果大家有好的解法欢迎评论!

时间复杂度:O(n)

Code:(LeetCode运行3ms)

class Solution {public:    string addBinary(string a, string b) {        string result = "";        int len1 = a.length();        int len2 = b.length();        len1 > len2 ? (b.insert(b.begin(), len1 - len2, '0')) : (a.insert(a.begin(), len2 - len1, '0'));        int flag = 0, eachNumber;        char eachChar;        for (int i = a.length() - 1; i >= 0; i--) {            eachNumber = Addchar(a[i], b[i], flag);            if (eachNumber <= 1) {                eachChar = eachNumber + '0';                flag = 0;            } else {                eachNumber -= 2;                eachChar = eachNumber + '0';                flag = 1;            }            result.push_back(eachChar);        }        if (flag == 1) {            result.push_back('1');        }        reverse(result.begin(), result.end());        return result;    }        int Addchar(char c1, char c2, int flag) {        return (int) (c1 - '0') + (int) (c2 - '0') + flag;    }};


原创粉丝点击