1 题目描述

2 解题思路

2.1 整数相加过渡

将A,B转化为整数(使用迭代实现),然后将A+B转换成二进制的字符串

返回的内容从第二个下标开始,是为了剔除bin()函数返回的'0b'这两个字符串

class Solution:def addBinary(self, a: str, b: str) -> str:A=0for i in a:A=A*2+int(i)B=0for i in b:B=B*2+int(i)
#分别计算A和B对应的整数return(bin(A+B)[2:])

2.2 整数相加过渡(使用int函数)

int(str,n):以n为基,计算字符串str的值

class Solution:def addBinary(self, a: str, b: str) -> str:A=int(a,2)B=int(b,2)return(bin(A+B)[2:])

2.3 字符串倒置,一位一位加(同时考虑进位的问题)

class Solution:def addBinary(self, a: str, b: str) -> str:a_=a[::-1]b_=b[::-1]carry=0 #进位lstr='' #返回的字符串for i in range(min(len(a),len(b))):tmp=int(a_[i])+int(b_[i])+carryif(tmp>1):carry=1tmp=tmp-2else:carry=0#看是否有进位lstr+=str(tmp)if(len(a)>min(len(a),len(b))):for i in range(min(len(a),len(b)),len(a)):tmp=int(a_[i])+carryif(tmp>1):carry=1tmp=tmp-2else:carry=0lstr+=str(tmp)#有可能一位计算完了,另一位还有值if(len(b)>min(len(a),len(b))):for i in range(min(len(a),len(b)),len(b)):tmp=int(b_[i])+carryif(tmp>1):carry=1tmp=tmp-2else:carry=0lstr+=str(tmp)if(carry==1):lstr+=str(1)#全部计算完了,如果还有进位,在前面补一位return(lstr[::-1])

2.4 2.3方法修改版

class Solution:def addBinary(self, a: str, b: str) -> str:a=list(a)b=list(b)carry=0 #进位lstr='' #最终要返回的字符串while(True):tmp=0flag=True
#flag表示能不能跳出这个循环,如果a,b没有值,进位为0,就能跳出if(len(a)>0):print('a',a)tmp+=int(a.pop())flag=Falseif(len(b)>0):print('b',b)tmp+=int(b.pop())flag=Falseif(carry>0):print('c',carry)tmp+=carryflag=Falseif(tmp>1):carry=1tmp-=2else:carry=0if(flag==True):breaklstr+=str(tmp)return(lstr[::-1])

2.5 位运算

先看一下位操作的一些结论

1)异或操作(位数不同的话向前补零)

——>结果是对应两位之间不考虑进位的加法结果

2)与操作(位数不同的话向前补零)

——>只有x,y对应的元素都是1才会得到该位置为1

——>结果是x,y对应位置相加,会不会产生进位的情况

然后每一位的进位情况,影响的是前一位是否加一,所以与操作的结果要向左移动一位

然后上一次不考虑进位的相加结果+后一位的进位情况,再得到一对不考虑进位结果的+进位结果

依次迭代,直到进位情况全部为0,此时没有进位了为止

class Solution:def addBinary(self, a: str, b: str) -> str:A=int(a,2)B=int(b,2)while(B):A,B=A^B,(A&B)<<1
#此时的A,B分别表示两个数(数和进位)相加的结果(不考虑进位)、进位的结果return bin(A)[2:]

注:在python里面 a,b=c,d 的意思是(a,b)=(c,d),也就是cd同时调整

文巾解题 67. 二进制求和相关推荐

  1. 文巾解题 342. 4的幂

    1 题目描述 2 解题思路 2.1 方法1 判断log函数的结果是不是整数 class Solution:def isPowerOfFour(self, n: int) -> bool:if(n ...

  2. 文巾解题 477. 汉明距离总和

    1 题目描述 2 解题思路 2.1 暴力两两比较 两个数字之间的汉明距离可以使用 文巾解题 461. 汉明距离_刘文巾的博客-CSDN博客 中的任何一种方法,但是因为这个是两两比较,时间复杂度比较高, ...

  3. 文巾解题 面试题 01.04. 回文排列

    1 题目描述 2 解题思路 2.1 哈希表 创建一个哈希表,记录每个元素出现的次数.如果出现次数为奇数的元素只有一个或者没有,那么就是一个回文排列 class Solution:def canPerm ...

  4. 文巾解题 15. 三数之和

    1 题目描述 2 解题思路 2.1 使用两数之和函数 这种做法目前超时了,如果大家有想到合适的减时间/剪枝的方法,欢迎私信or评论~ 两数之和的方法见文巾解题 1. 两数之和_刘文巾的博客-CSDN博 ...

  5. 文巾解题 1035. 不相交的线

    1 题目描述 2 解题思路 k条互不相交的直线分别连接了数组 nums1和nums2的 k 对相等的元素,而且这 k 对相等的元素在两个数组中的相对顺序是一致的,因此,这 k 对相等的元素组成的序列即 ...

  6. 文巾解题 278. 第一个错误的版本

    1 题目描述 2 解题思路 二分查找见:二分查找详解_刘文巾的博客-CSDN博客 class Solution(object):def firstBadVersion(self, n):left=1r ...

  7. 文巾解题 704. 二分查找

    1 题目描述 2 解题思路 二分查找见: 二分查找详解_刘文巾的博客-CSDN博客 class Solution(object):def search(self, nums, target):left ...

  8. 文巾解题 627. 变更性别

    1 题目描述 2 解题思路 回顾一下 UPDATE语句 2.1 CASE语句 回顾一下CASE语句(见数据库笔记: SQL_刘文巾的博客-CSDN博客 第六节) UPDATE salary SET s ...

  9. 文巾解题 面试题 17.10. 主要元素

    1 题目描述 2 解题思路 因为是O(N)的时间复杂度和O(1)的空间复杂度,所以想到的是Boyer-Moore 投票算法.这个算法的原理可见:算法整理:Boyer-Moore 投票算法_刘文巾的博客 ...

最新文章

  1. jq获取img高度(动态生成的image高度为0原因)
  2. 配置MaxCompute任务消费监控告警,避免资源过度消费
  3. BZOJ 4242 水壶(BFS建图+最小生成树+树上倍增)
  4. 没数据也能玩转BERT!无监督语义匹配实战
  5. mysql修改视图字段长度_SQL Server 数据库创建视图时修改字段长度
  6. A Game with Traps—— 二分
  7. Java实现极光推送
  8. 红帽linux7.2安装教程,RHEL 6.2安装(超级详细图解教程) | 系统运维
  9. Js节流(防连点)和防抖动
  10. 淘宝京东商品长链接缩短为腾讯,新浪短链接的接口有哪些?
  11. Cocos Creator入门实战:桌球小游戏
  12. JAVA修炼之路的开启
  13. Sabre选择DXC Technology来助力改变未来旅游业,作为两家公司续约多年期协议的一部分
  14. sql批量更新update嵌套select更新
  15. React生命周期 - 前端
  16. 电子信息工程学不学python_电子信息工程小白转行深度学习
  17. 《社交网络》里的评分公式——ELO排名系统
  18. debugger调试工具配置
  19. linux服务器运行停止Jar包Shell脚本编写
  20. 伴随诊断试剂的三种开发路径

热门文章

  1. Filter的详解与配置应用
  2. foxmail使用技巧
  3. PAT甲级1118 Birds in Forest :[C++题解]并查集
  4. 51Nod- 1915 西湖游船
  5. arm linux gnueabi编译,交叉编译器 arm-linux-gnueabi 和 arm-linux-gnueabihf 的区别
  6. 宝塔面板部署nuxt_MacOS下创建及部署vue.js项目(及Nuxt.js、PM2等相关流程)
  7. python迷宫问题的所有路径_python——迷宫问题总结
  8. 设置透明色有残留怎么办_无尘车间装修,无尘车间内部光线不好怎么办?
  9. oracle不维护java_宣布 Java 8 停止维护后,Oracle 又毙掉了 JavaOne!
  10. linux 卸载java jdk1.6_Linux/CentOS 卸载系统原装jdk1.4 和安装jdk1.6.1