【leetcode】67.二进制求和

前言:剑指offer刷题系列

问题:

给你两个二进制字符串 ab ,以二进制字符串的形式返回它们的和。

示例:

输入:a = "1010", b = "1011"
输出:"10101"

思路1:

我们为了避免去判断谁大谁小的边界问题,直接把最短的字符串前面先补0。设置一个保存进位的数,从低到高遍历,逢二进一。

先通过两个 while 循环将输入的二进制字符串 ab 的长度补齐,使它们的长度相等。如果其中一个字符串较短,就在它的前面添加0,以保证两个二进制数的位数相同。

然后,定义了一个变量 tmp 用来存储进位信息,初始化为0。同时,将字符串 ab 一起转换为列表,以便进行逐位相加操作。

接下来,通过一个 for 循环从字符串的最后一位开始逐位相加,从低位到高位。具体的相加规则如下:

  • 如果当前位的数字是0,1,2,3中的0,那么将进位 tmp 和当前位相加,并根据相加结果更新当前位。
  • 如果相加结果是3,表示当前位和进位都是1,那么当前位变为0,进位为1。
  • 如果相加结果是2,表示当前位和进位中有一个是1,那么当前位变为0,进位为1。
  • 如果相加结果是1,表示当前位和进位中只有一个是1,那么当前位变为1,进位为0。

最后,在循环结束后,检查是否还有进位 tmp。如果有进位,就在结果字符串的最前面添加一个 “1”。最终,返回结果字符串。

时间复杂度:O(n)

空间复杂度:O(n)

基于上述思考,代码如下:

class Solution:def addBinary(self, a: str, b: str) -> str:while len(a) > len(b):b = "0" + bwhile len(a) < len(b):a = "0" + atmp = 0a, b = list(a), list(b)for i in range(len(a) - 1, -1, -1):cur = int(a[i]) + int(b[i]) + tmpif cur == 3:b[i] = "1"tmp = 1elif cur == 2:b[i] = "0"tmp = 1elif cur == 1:b[i] = "1"tmp = 0else:b[i] = "0"tmp = 0if tmp == 1:b = ["1"] + breturn "".join(b)

执行结果如下图:

image-20230921213739847.png

思路2:

首先,将输入的二进制字符串 ab 使用 int(a, 2)int(b, 2) 转换为整数,基数为2,表示将二进制字符串转换为整数。然后,这两个整数相加,得到它们的和。

接下来,将上一步得到的和转换为二进制字符串形式,并通过切片操作去掉字符串的前缀"0b",以获取纯二进制数表示。

最终,该方法返回两个二进制数相加后的结果作为二进制字符串。

基于上述思考,代码如下:

class Solution(object):def addBinary(self, a, b):return bin(int(a,2)+int(b,2))[2:]

执行结果如下图:

image-20230921212905238.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/557216.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【五 (3)统计学知识-概型与概率分布python代码实现】

目录 文章导航一、概率基础与性质二、概型模型1、古典概型2、几何概型3、伯努利试验概型 三、组合和排序1、组合2、排序 四、概率分布1、离散型分布①伯努利分布②二项分布③泊松分布 2、连续型分布①均匀分布②指数分布③正态分布/高斯分布④对数正态分布⑥幂律分布⑦帕累托分…

ECharts5 概念篇2

数据转换 数据转换基础使用 在 echarts 中&#xff0c;数据转换是依托于数据集&#xff08;dataset&#xff09;来实现的. 我们可以设置 dataset.transform 来表示&#xff0c;此 dataset 的数据&#xff0c;来自于此 transform 的结果。下面是上述例子的效果&#xff0c;三个饼…

C语言例:设 int a,b; 则表达式(a=2,b=5,a++,b++,a+b) 的值

代码如下&#xff1a; #include<stdio.h> int main(void) {int a,b,m; m(a2,b5,a,b,ab);printf("(a2,b5,a,b,ab) %d\n",m);//a2,b5,a3,b6,ab9return 0; } 结果如下&#xff1a;

【Linux进程的状态】

目录 看Linux源码中的说法 如何查看进程状态&#xff1f; 各个状态的关系 僵尸进程 举个栗子 现象 僵尸进程的危害 孤儿进程 举个栗子 现象 进程的优先级 基本概念 为什么要有进程优先级&#xff1f; 查看系统进程 进程的大致属性 进程优先级vs进程的权限 Linu…

odoo扩展导出pdf功能

1. 说明: odoo原生导出功能扩展导出pdf文件功能, 如有额外需求请联系博主 2. 版本说明: odoo版本: odoo15 其他odoo版本未进行测试,如有需要自行测试 3. 地址: 该补丁代码放在github仓库, 地址: https://github.com/YSL-Alpaca/odoo_export_pdf 4. 改补丁依赖于第三方软件wkh…

阿里云优惠券、代金券、折扣券领取方法及使用教程

随着云计算技术的普及和发展&#xff0c;越来越多的企业和个人开始选择使用云服务。阿里云作为国内领先的云计算服务提供商&#xff0c;为广大用户提供了丰富多样的云产品和服务。为了吸引用户上云&#xff0c;阿里云经常推出各种优惠活动&#xff0c;其中就包括阿里云优惠券。…

进程创建,程序加载运行,以及进程终止,什么是僵尸进程,什么是孤儿进程

进程控制 创建进程&#xff0c;撤销进程&#xff0c;实现进程转换&#xff08;必须一气呵成&#xff0c;使用原语&#xff09; 原语不被中断是因为有关中断指令 创建进程 撤销进程 进程创建fork fork&#xff08;&#xff09;函数会创建一个子进程&#xff0c;子进程会返…

Redis中的过期键删除策略

过期键删除策略 概述 数据库键的过期时间都保存在过期字典中&#xff0c;并且知道根据过期时间去判断一个键是否过期,剩下的问题是&#xff1a;如果一个键过期了&#xff0c;那么它什么时候会被删除呢? 这个问题有三种可能的答案&#xff0c;它们分别代表了三种不同的删除策…

PPT好看配色

放几个链接&#xff01;画图时候可以参考&#xff01;转自知乎 Color Hunt ColorDrop 中国色 Flat UI Colors Coolors

深兰科技“AI数字伙伴”亮相“全国社会心理服务体系建设经验交流大会”

我国首届“全国社会心理服务体系建设经验交流大会”在山东省滨州市黄河三角洲交易中心举行&#xff0c;深兰科技携最新研发的“AI数字伙伴”出席大会&#xff0c;公开亮相&#xff01; 本次会议由国家心理健康和精神卫生防治中心、华夏时报社联合主办&#xff0c;是目前国内社会…

UE5的渲染-太难了

大家可以看到&#xff0c;这些都是UE的渲染&#xff0c;非常漂亮惊叹&#xff0c;渲染已经非常成熟&#xff0c;这些画面并不是离线渲染&#xff0c;而是实时渲染。早先年我们渲染CG动画都采用离线渲染&#xff0c;要用到庞大的渲染农场&#xff0c;每渲染一帧都可能需要半个小…

美易官方:美股维持涨势,三大股指再创新高

在今日的早盘交易中&#xff0c;美股市场继续维持其涨势&#xff0c;三大股指再次刷新历史纪录。市场信心受到一系列积极经济数据的支撑&#xff0c;投资者对未来的经济增长和企业盈利保持乐观态度。 首先&#xff0c;让我们来看一下道琼斯工业平均指数的表现。该指数在早盘交易…