【LeetCode】67. 二进制求和

news/2025/2/22 6:27:53/

1 问题

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

示例 1:

输入:a = “11”, b = “1”
输出:“100”

示例 2:

输入:a = “1010”, b = “1011”
输出:“10101”

2 答案

自己写的,先转成十进制,再求和,再转成二进制

class Solution:def addBinary(self, a: str, b: str) -> str:int_a, int_b = 0, 0c = ''for i in range(len(a)):int_a = int_a + int(a[i]) * 2 ** (len(a)-i-1)for j in range(len(b)):int_b = int_b + int(b[j]) * 2 ** (len(b)-j-1)int_c = int_a + int_bif int_c==0 : return "0" while int_c:c = str(int_c % 2) + cint_c //= 2return c

在这里插入图片描述
官方解

  1. 一行写法
class Solution:def addBinary(self, a: str, b: str) -> str:return bin(int(a, 2) + int(b, 2))[2:]  # int(a, 2) 将二进制字符串转成整数# bin 将整数转换为二进制# 对结果如"0b100"进行切片,去掉前面的’0b‘
  1. 二进制两数相加
class Solution:def addBinary(self, a: str, b: str) -> str:res, p = '', 0d = len(b) - len(a)a = '0'*d + a  # 让a和b长度相同,如果d小于零,则不会补0b = '0'*-d + b for i, j in zip(a[::-1],b[::-1]):  # 翻转切片,从后往前加s = int(i) + int(j) + p  # 二进制两数相加res = str(s%2) + resp = s // 2return str(p)+res if p else res

https://leetcode.cn/problems/add-binary/solutions/7221/python-1xing-nei-zhi-han-shu-fei-nei-zhi-jie-fa-by/

  1. 也可以使用 divmod
class Solution:def addBinary(self, a: str, b: str) -> str:res, carry = '', 0i = len(a) - 1j = len(b) - 1while i>=0 or j>=0 or carry:tmp1 = int(a[i]) if i>=0 else 0 tmp2 = int(b[j]) if j>=0 else 0 carry, t = divmod(tmp1+tmp2+carry, 2) # carry除以2的商,t为余数res = str(t) + resi -= 1j -= 1return res

https://leetcode.cn/problems/add-binary/solutions/6200/mo-ni-guo-cheng-by-powcai-4/


http://www.ppmy.cn/news/1167745.html

相关文章

Linux_Shell运行原理(命令行解释器)

一般我们叫Linux操作系统,狭义上就是指Linux内核(kernel),广义上就是Linux内核Linux外壳程序对应的配套程序,这里我们来详细介绍一下这个“外壳程序”。 在我们使用指令时,这个外壳程序会将我们的解释指令并…

USRP-2944 配件讲解,如何选择对应的配件

USRP-2944 产品图片 产品官网价格信息 查看附件和价格 硬件服务 NI硬件服务计划通过简化物流,延长正常运行时间以及根据业界标准维护数据的可追溯性,帮助您节省系统组装、设置和维护所需的时间和金钱。这些计划涵盖多年期维修服务,同时还提…

sqlmap防御以及文件读写

一.防御 过滤 1.使用过滤函数 $email filter_var($_POST[email], FILTER_VALIDATE_EMAIL); if ($email) { // input is a valid email address } else { // input is not a valid email address 使用 filter_var() 函数和 FILTER_VALIDATE_EMAIL 过滤器来验证用户输…

Java - 多进程编程(对比线程、API 操作)

目录 一、多进程编程 1.1、为什么要使用多进程编程 1.2、Java 中多进程编程的实现 1.2.1、前言 1.2.2、进程创建 1.2.3、进程等待 1.2.4、封装操作到一个工具类中 一、多进程编程 1.1、为什么要使用多进程编程 一个 .exe 文件执行以后,就会变成一个进程. 多…

Ubuntu22.04安装nvidia-docker

安装docker 参考这篇文章:Ubuntu22.04安装docker - 掘金 安装nvidia-docker 参考这篇文章:Ubuntu 22.04 LTS : NVIDIA Container Toolkit : Install : Server World 流程: curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | …

统计学习方法 感知机

文章目录 统计学习方法 感知机模型定义学习策略学习算法原始算法对偶算法 学习算法的收敛性 统计学习方法 感知机 读李航的《统计学习方法》时,关于感知机的笔记。 感知机(perceptron)是一种二元分类的线性分类模型,属于判别模型…

创新的营销模式与线上商城的完美结合

分享购,一个与众不同的电商平台,以一种全新的营销模式和独特的商业运营模式,颠覆了传统电商的观念,让每个人都能拥有属于自己的线上商城。它集自营品牌、供应链管理和CPS等多种优势于一身,形成了一种创新的交易和共享生…

探讨Socks5代理技术的原理及其在不同领域的应用

Socks5代理:实现网络连接的智能之选 作为一种网络代理协议,Socks5代理技术通过转发网络数据包,实现了客户端和服务器之间的代理传输。其独特的特性在跨界电商、爬虫数据分析、企业出海和游戏体验等领域发挥着关键作用,为用户提供…