您的位置:首页 > 其它

[leetcode]45 Add Binary

2015-04-02 13:58 246 查看
题目链接:https://leetcode.com/problems/add-binary/

Runtimes:6ms

1、问题

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

For example,

a = “11”

b = “1”

Return “100”.

2、分析

从尾部开始相加,^用来进行不进位的加法,如下:

1^1 = 0 ^ 0 = 0; 1 ^ 0 = 0 ^ 1 = 1;

&用来计算是否进位的加法,如下:

1 ^ 1 = 1; 1 ^ 0 = 0 ^ 1 = 0 ^ 0 = 0;

当计算3个数是否进位时,只要有两个1就需要进位,这是个小技巧。

3、小结

位运算会比加减法快很多。

4、实现

class Solution {
public:
string addBinary(string a, string b) {
if (a.length() < b.length())
{
string s = a;
a = b;
b = s;
}
if (a.length() == 0 || b.length() == 0)
return a;
int al = a.length() - 1, bl = b.length() - 1, carry = 0;
while (al >= 0 && bl >= 0)
{
int ta = a[al] - '0', tb = b[bl] - '0';
a[al] = (ta ^ tb ^ carry) + '0';
carry = (ta & tb) || (ta & carry) || (tb & carry);
al--; bl--;
}
while (al >= 0)
{
int ta = a[al] - '0';
a[al] = (ta ^ carry) + '0';
carry = ta & carry;
al--;
}
if (carry == 1)
a = a.insert(0, 1, '1');
return a;
}
};


5、反思

效果挺好的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: