zoukankan      html  css  js  c++  java
  • 一道算法(位处理)

    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/houxt/p/11250334.html

  • 相关阅读:
    Java基础知识
    jQuery的表单操作
    SSM——查询_分页
    jQuery实现查看删除
    SSM之Maven工程的搭建
    Mybatis使用@Param
    Mybatis简单的CURD
    Mybatis使用接口开发
    初入Mybatis
    SQL语句
  • 原文地址:https://www.cnblogs.com/topass123/p/13182601.html
Copyright © 2011-2022 走看看