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;
}
};