Leetcode: Add Binary
来源:互联网 发布:中科大软件学院招生 编辑:程序博客网 时间:2024/06/06 05:50
Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
.
从后往前会简单一些,写了一个从前往后的,稍微复杂点。
class Solution {public: string addBinary(string a, string b) { int asize = a.size(); int bsize = b.size(); int size = max(asize, bsize); asize = size - asize; bsize = size - bsize; string result = "0"; int tmp, last_zero = 0; for (int i = 0; i < size; ++i) { tmp = 0; if (i >= asize) { tmp += a[i - asize] - '0'; } if (i >= bsize) { tmp += b[i - bsize] - '0'; } if (tmp >= 2) { result[last_zero] = '1'; for (int j = last_zero + 1; j <= i; ++j) { result[j] = '0'; } tmp -= 2; } result.push_back(tmp + '0'); if (tmp == 0) { last_zero = i + 1; } } if (result[0] == '0') { result = result.substr(1); } return result; }};
===================第二次===============
运算符优先级,+ 高于 按位&;这个弄错了折腾好久,看来要多加括号呀。
class Solution {public: string addBinary(string a, string b) { int asize = a.size(); int bsize = b.size(); int rsize = max(asize, bsize) + 1; string result(rsize, '0'); int sum = 0; int length = min(asize, bsize); for (int i = 0; i < length; ++i) { sum += a[asize-1-i] - '0' + b[bsize-1-i] - '0'; result[rsize-1-i] = '0' + (sum & 1); sum >>= 1; } string remaining = asize > bsize ? a : b; for (int i = length; i < rsize - 1; ++i) { sum += remaining[rsize-2-i] - '0'; result[rsize-1-i] = '0' + (sum & 1); sum >>= 1; } if (sum == 1) { result[0] = '1'; } else { result = result.substr(1); } return result; }};
0 0
- LeetCode: Add Binary
- [Leetcode] Add Binary
- LeetCode Add Binary
- Leetcode: Add Binary
- [Leetcode] Add Binary
- LeetCode : Add Binary
- LeetCode Add Binary
- [LeetCode] Add Binary
- leetcode 58: Add Binary
- leetcode Add Binary
- [LeetCode] Add Binary
- 【leetcode】Add Binary
- [LeetCode]Add Binary
- [leetcode]Add Binary
- LeetCode-Add Binary
- [leetcode] Add Binary
- LeetCode - Add Binary
- leetcode:Add Binary
- ZOJ-2495
- 简明解释算法中的大O符号
- 五招防止QQ密码被盗
- 网络学习笔记(二)
- POJ 1703
- Leetcode: Add Binary
- 一份简单的代码演示缓冲区溢出的危害
- uva 11076
- Linux系统中使用fdisk命令为U盘分区,并将其中一个分区设置为启动盘
- CString 的分割函数
- java.io.FileNotFoundException: Source '\tmp\upload__3a3bcc78_143699__8000_000014.tmp' does not exist
- 从关系型数据库到非关系型数据库
- hdu1753 用java解高精度
- slide + stack address - load address = symbol address