[leetcode]45 Add Binary
2015-04-02 13:58
246 查看
题目链接:https://leetcode.com/problems/add-binary/
Runtimes:6ms
For example,
a = “11”
b = “1”
Return “100”.
1^1 = 0 ^ 0 = 0; 1 ^ 0 = 0 ^ 1 = 1;
&用来计算是否进位的加法,如下:
1 ^ 1 = 1; 1 ^ 0 = 0 ^ 1 = 0 ^ 0 = 0;
当计算3个数是否进位时,只要有两个1就需要进位,这是个小技巧。
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、反思
效果挺好的。相关文章推荐
- Add Binary - LeetCode
- 【LeetCode-面试算法经典-Java实现】【067-Add Binary(二进制加法)】
- 【LeetCode 67_字符串_算术运算】Add Binary
- Leetcode-67. Add Binary
- LeetCode(65)Add Binary
- [LeetCode]Add Binary
- [LeetCode]Add Binary
- Leetcode 55. Jump Game & 45. Jump Game II
- 面试笔试杂项积累-leetcode 41-45
- Leetcode: Add Binary
- 45 leetcode - Rotate Function
- Leetcode_Add Binary
- Leetcode: Add Binary
- Add Binary----LeetCode
- Leetcode Problem.67—Add Binary
- [leetcode] 67.Add Binary
- 【LeetCode-45】Jump Game II
- leetcode--Add Binary
- LeetCode 67: Add Binary
- [Leetcode]67.Add Binary