二进制求和
来源:互联网 发布:淘宝旺旺注册 编辑:程序博客网 时间:2024/05/17 02:10
题目描述:给定两个二进制字符串,返回他们的和(用二进制表示)。
样例:a = 11;b = 1。返回 100
和之前链表求和(详见:点击打开链接)的逻辑一样,都是对于整数“序列化”的求和,主要考察的是对于序列(数组,字符串等)的操作的熟悉程度。
我们可以新建一个结果字符串——result,初始化为空,然后从后往前遍历两个给出的二进制字符串,对应位做二进制加法(当然要处理好进位的问题),然后依次将相加的结果添加到result中即可。
但是这个里面有个问题,就是两个二进制串的长度不一定相同,如果要对长度进行判断和处理的话,代码量显然太多。所以可以采取这样一种方法,如果说其中一个二进制字符串已经遍历完,我们再往下遍历时,就把这个二进制字符串的位看做0(其实已经没有了,但是看做0不会影响),相当于本来是11 + 1,现在变成了11 + 01,结果是不受影响的,但是写循环的时候则节省了代码量。
代码如下:
class Solution: # @param {string} a a number # @param {string} b a number # @return {string} the result def addBinary(self, a, b): index1, index2 = len(a) - 1, len(b) - 1 result = "" # 进位的值,0表示不进位(进位0),1表示进位1 add1 = 0 while index1 >= 0 or index2 >= 0: t1 = int(a[index1]) if index1 >= 0 else 0 t2 = int(b[index2]) if index2 >= 0 else 0 temp = t1 + t2 + add1 result = str(temp % 2) + result add1 = temp // 2 index1 -= 1 index2 -= 1 if add1 == 1: result = "1" + result return result # Write your code here注意一下,不要忘了18行对最后进位的处理。代码很简单,但是需要细心。
0 0
- 二进制求和
- 二进制求和
- 二进制求和
- 二进制求和
- 二进制求和
- 二进制求和
- 二进制求和
- 二进制求和
- 二进制求和
- 链表求和 & 二进制求和
- 二进制反码求和
- 二进制反码求和
- 题目:二进制求和
- LintCode-二进制求和
- tcp二进制反码求和
- LIntCode-二进制求和
- 容易 二进制求和
- 二进制求和(LintCode)
- Android自定义控件+popuwindow下拉菜单的实现仿58下拉菜单
- ANR traces分析 系统一直出现 waiting for ...日志
- CentOs7 开启网络连接
- 正确使用iOS常量(const)、enum以及宏(#define)
- Linux workqueue工作原理
- 二进制求和
- MySQL簇--mysql集群搭建
- hdu 2586 How far away ? lca 在线和离线算法
- Remove Linked List Elements
- MySQL 5.6配置GTID复制模式
- 百度地图应用
- 杭电1113(Java实现)
- Solr --- Query
- 数据结构与算是:C++实现堆排序