首页 > 编程语言 > 详细

一道算法(位处理)

时间:2020-06-23 17:50:43      阅读:70      评论:0      收藏:0      [点我收藏+]
67. 二进制求和
给你两个二进制字符串,返回它们的和(用二进制表示)。

输入为 非空 字符串且只包含数字 10。

 

示例 1:

输入: a = "11", b = "1"
输出: "100"
示例 2:

输入: a = "1010", b = "1011"
输出: "10101"
class Solution:
    def addBinary(self, a, b) -> str:
        x, y = int(a, 2), int(b, 2)
        while y:
            answer = x ^ y
            carry = (x & y) << 1
            x, y = answer, carry
        return bin(x)[2:]

思考:

把 a 和 b 转换成整型数字 x和 y,在接下来的过程中,x保存结果,y保存进位。
当进位不为 00 时
计算当前 x 和 y 的无进位相加结果:answer = x ^ y
计算当前 x 和 y 的进位:carry = (x & y) << 1
完成本次循环,更新 x = answer,y = carry
返回 x 的二进制形式

 

使用int()函数将二进制字符串a与b转换为十进制数,再把a与b相加后使用bin函数转换为二进制数

注意a,b必须是字符串类型。否则报错: int() can‘t convert non-string with explicit base

^异位处理,

&同真为真,其他为假

取bin(x)[2:],是为了解决二进制的标志问题:

>>> bin(10)[:]
‘0b1010‘

 

一道算法(位处理)

原文:https://www.cnblogs.com/topass123/p/13182601.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!