Add Binary
来源:互联网 发布:汉字书写顺序软件 编辑:程序博客网 时间:2024/06/05 20:31
1.题目
给定两个二进制字符串,返回他们的和(用二进制表示)。
a = 11
b = 1
返回 100
2.算法
算法思想是从低位开始,一直相加并且维护进位。这个题目低位在后面,所以要从string的尾部往前加。时间复杂度是O(max(m,n)),m和n分别是两个字符串的长度,空间复杂度是结果的长度O(max(m,n))。
public String addBinary(String a, String b) { // Write your code here if (a == null || a.length() == 0) { return b; } if (b == null || b.length() == 0) { return a; } int i = a.length() - 1; int j = b.length() - 1; int carry = 0; StringBuffer res = new StringBuffer(); while (i >= 0 && j >= 0) { int digit = (int)(a.charAt(i) - '0' + b.charAt(j) - '0') + carry; carry = digit / 2; digit = digit % 2; res.append(digit); i--; j--; } while (i >= 0) { int digit = (int)(a.charAt(i) - '0') + carry; carry = digit / 2; digit = digit % 2; res.append(digit); i--; } while (j >= 0) { int digit = (int)(b.charAt(j) - '0') + carry; carry = digit / 2; digit = digit % 2; res.append(digit); j--; } if (carry > 0) { res.append(carry); } return res.reverse().toString(); }
def addBinary(self, a, b): # Write your code here i = len(a) - 1 j = len(b) - 1 carry = 0 sum = '' while i >= 0 or j >= 0: x = int(a[i]) if i >= 0 else 0 y = int(b[j]) if j >= 0 else 0 if (x + y + carry) % 2 == 0: sum = '0' + sum else : sum = '1' + sum carry = (x + y + carry) / 2 i, j = i - 1, j - 1 if carry > 0: sum = '1' + sum return sum
0 0
- Add Binary
- Add Binary
- Add Binary
- Add Binary
- Add Binary
- Add Binary
- Add Binary
- Add Binary
- Add Binary
- Add Binary
- Add Binary
- Add Binary
- Add Binary
- Add Binary
- Add Binary
- Add Binary
- Add Binary
- Add Binary
- PAT A1058
- scala中的偏应用函数(Partially Applied Function)
- 流媒体框架vlc简单的案例
- 第二周第二天
- leetcode235
- Add Binary
- docker run的各种参数
- CH8,p150,上传综合应用 error_reporting, move_uploaded_file应用;复选值输出;
- PAT A1059
- apache性能测试工具ab使用详解
- 学生资料的收集页面
- 开通博客了 定个小目标
- opencv学习笔记(一)读入一幅图片
- [CSS]CSS background属性