首页 > 其他分享 >剑指 Offer II 002. 二进制加法

剑指 Offer II 002. 二进制加法

时间:2022-12-14 17:33:54浏览次数:58  
标签:运算 二进制 Offer int CF II 002 字符串 进位

题目描述

二进制加法:给定两个 01 字符串 a 和 b ,请计算它们的和,并以二进制字符串的形式输出。

输入为 非空 字符串且只包含数字 1 和 0。

提示:

  • 每个字符串仅由字符 '0' 或 '1' 组成。
  • 1 <= a.length, b.length <= 10^4
  • 字符串如果不是 "0" ,就都不含前导零。

代码&思路

直接运算

class Solution:
def addBinary(self, a, b) -> str:
    return '{0:b}'.format(int(a, 2) + int(b, 2))

算法复杂度:O(a.length + b.length)

位运算

二进制加法可以拆分为按位相加(相同为0,不同为1),逐个进位(当前位有进位,前一位加1)的运算。所以可以分解为多次循环求解。

每次循环:
ans^CF(异或运算)取得无进位数ans;
ans&CF(与运算)取得进位CF,左移得到进位;
直到进位CF等于0,也就是无进位,运算结束。

class Solution:
def addBinary(a, b):
    CF = 1
    x, y = int(a, 2), int(b, 2)
    while CF::
        ans = x ^ y
        CF = (x & y) << 1
        x, y = ans, CF
    return bin(ans)[2:]

算法复杂度:O(max {x.length, y.length} )

Python总结

str.format() 格式化数字

int(a, n) 字符串转数字

bin(x)[2:] x的二进制表示

标签:运算,二进制,Offer,int,CF,II,002,字符串,进位
From: https://www.cnblogs.com/tree123/p/16982736.html

相关文章

  • LeetCode80. 删除排序数组中的重复项 II
    给定一个排序数组,你需要在​​原地​​删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在​​原地​​修改输入数组并在......
  • 第八节:基于Core6.0中间件实现SignalR的安全校验 以及 部署IIS注意的问题
    一.        二.        三.         !作       者:Yaopengfei(姚鹏飞)博客地址:http://www.cnblog......
  • 剑指Offer-Java-二叉树的镜像
    题目题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树8/\610/\/\57911......
  • 剑指Offer-Java-用两个栈实现队列
    题目用两个栈来实现一个队列,完成队列的Push和Pop操作。队列中的元素为int类型。代码只需要来回倒就可以实现了。importjava.util.Stack;publicclassSolution{Stack......
  • 剑指Offer-Java-重建二叉树
    题目输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍......
  • 剑指Offer-Java-序列化二叉树
    题目请实现两个函数,分别用来序列化和反序列化二叉树代码此题的核心点是如何表示二叉树,并且解释。/*publicclassTreeNode{intval=0;TreeNodeleft=null;......
  • IIC协议驱动设计
    FPGA零基础学习:IIC协议驱动设计本系列将带来FPGA的系统性学习,从最基本的数字电路基础开始,最详细操作步骤,最直白的言语描述,手把手的“傻瓜式”讲解,让电子、信息、通信类专......
  • 002 Typora 的使用(markdown 的使用)
    工欲善其事,必先利其器(得有个东西去记录他)用word、有道云笔记用程序猿专用Makrdown文本(.md)--》可以直接和h5代码无缝连接红色字体一般大型it项目都会有一个README.md......
  • 【MASHIII调制器】MASHIII调制器的Simulink建模与仿真
    1.软件版本MATLAB2021a2.本算法理论知识 这里,基于小数分频的频率合成器,考虑到你需要实现sigma-delta以及mash等结构。因此,系统的模块结构如下图所示:  下面,我们对......
  • 刷题笔记——3002.买图书 & 2763.计算(a+b)/c的值
    题目13002.买图书代码whileTrue: try: n,m=map(float,input().strip().split()) if(n==10andm==1): print('{:.2f}'.format(99.20)) else: prin......