当前位置: 首页 > news >正文

力扣第 67 题 “二进制求和”

题目描述

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

示例 1:

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

示例 2:

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

提示:

  1. 每个字符串仅由字符 '0''1' 组成。
  2. 每个字符串都不会包含前导零,除了 “0” 本身。
  3. 1 ≤ a . l e n g t h , b . l e n g t h ≤ 1 0 4 1 \leq a.length, b.length \leq 10^4 1a.length,b.length104

解决方案

可以通过模拟二进制加法的规则,从两个字符串的尾部开始逐位相加,记录进位,并生成结果字符串。

核心思路
  1. 使用双指针分别从字符串 ab 的末尾向前遍历。
  2. 每次取出当前指针指向的字符(或 0 如果指针超出范围),将其转换为整数并求和,同时加上进位。
  3. 将求和的结果取模 (2) 得到当前位,将其加入结果字符串;将求和结果整除 (2) 得到进位。
  4. 如果遍历结束后进位为 (1),需要在结果字符串前追加一个 1
  5. 返回结果字符串的反转。

C 语言实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>char* addBinary(char* a, char* b) {int lenA = strlen(a); // 字符串 a 的长度int lenB = strlen(b); // 字符串 b 的长度int maxLength = (lenA > lenB ? lenA : lenB) + 1; // 可能的最大长度(考虑进位)char* result = (char*)malloc((maxLength + 1) * sizeof(char)); // 分配结果字符串result[maxLength] = '\0'; // 设置字符串结尾符int carry = 0; // 进位标志int index = maxLength - 1; // 结果字符串的末尾索引// 从末尾向前逐位相加lenA--;lenB--;while (lenA >= 0 || lenB >= 0 || carry > 0) {int bitA = (lenA >= 0) ? a[lenA--] - '0' : 0; // 从 a 取当前位,或 0int bitB = (lenB >= 0) ? b[lenB--] - '0' : 0; // 从 b 取当前位,或 0int sum = bitA + bitB + carry; // 当前位求和result[index--] = (sum % 2) + '0'; // 当前位结果carry = sum / 2; // 更新进位}// 如果有多余的 0,在前面移动结果字符串指针return result + index + 1;
}int main() {char a[] = "1010";char b[] = "1011";char* result = addBinary(a, b);printf("结果: %s\n", result);// 因为结果可能有偏移,需要用原始地址释放free(result - strlen(result));return 0;
}

代码说明

  1. 双指针遍历

    • 使用 lenAlenB 作为指针从 ab 的末尾向前移动。
    • 对于超出长度范围的位,默认取 (0)。
  2. 进位处理

    • carry 记录进位。
    • 在当前位的求和结果中,模 (2) 的余数是当前位的值,整除 (2) 的商是进位。
  3. 动态分配结果字符串

    • 最大可能长度为 max ⁡ ( l e n A , l e n B ) + 1 \max(lenA, lenB) + 1 max(lenA,lenB)+1
    • 结果字符串存储的数字从低位开始,需要最终返回反转后的字符串。
  4. 字符串偏移

    • 由于可能有多余的 0,返回结果时调整指针位置。
      好,让我们举一个例子,其中 index 在计算完成后 不等于 -1。这是因为在某些情况下(例如没有进位且结果比输入字符串短),index 的值会大于 -1

计算过程

如果输入为:

a = "10", b = "01"
  1. 初始化:

    • lenA = 2, lenB = 2
    • maxLength = 3,分配 result[_, _, _]
    • index = 2
  2. 逐步相加:

    • 第一位:bitA = 0, bitB = 1sum = 0 + 1 + 0 = 1result[2] = 1index = 1
    • 第二位:bitA = 1, bitB = 0sum = 1 + 0 + 0 = 1result[1] = 1index = 0
    • 没有进位,结束。
  3. 最终结果:

    • result = [_, 1, 1]index = 0
    • 返回 result + index + 1,即 result + 1,输出 "11"

复杂度分析

  • 时间复杂度: O ( max ⁡ ( l e n A , l e n B ) ) O(\max(lenA, lenB)) O(max(lenA,lenB)),需要逐位遍历较长的字符串。
  • 空间复杂度: O ( max ⁡ ( l e n A , l e n B ) ) O(\max(lenA, lenB)) O(max(lenA,lenB)),存储结果字符串的空间。

测试示例

输入: a = "11", b = "1"
输出: "100"输入: a = "1010", b = "1011"
输出: "10101"输入: a = "0", b = "0"
输出: "0"

相关文章:

力扣第 67 题 “二进制求和”

题目描述 给你两个二进制字符串 a 和 b&#xff0c;以二进制字符串的形式返回它们的和。 示例 1: 输入: a "11", b "1" 输出: "100"示例 2: 输入: a "1010", b "1011" 输出: "10101"提示: 每个字符串仅由…...

Spring Boot优雅读取配置信息 @EnableConfigurationProperties

很多时候我们需要将一些常用的配置信息比如oss等相关配置信息放到配置文件中。常用的有以下几种&#xff0c;相信大家比较熟悉&#xff1a; 1、Value(“${property}”) 读取比较简单的配置信息&#xff1a; 2、ConfigurationProperties(prefix “property”)读取配置信息并与 …...

鸿蒙多线程开发——Sendable对象的序列化与冻结操作

1、Sendable对象的序列化与反序列化 Sendable对象的简单介绍参考文章&#xff1a;鸿蒙多线程开发——线程间数据通信对象03(sendable) 与JSON对象的序列化和反序列化类似&#xff0c;Sendable对象的序列化和反序列化是通过ArkTs提供的ASON工具来完成。 与JSON类似&#xff0…...

nodepad配置c/c++ cmd快速打开创建项目文件

前提:下载MinGw,并且配置环境变量 点击阅读次篇文章配置MinGw 无论是哪个编译器&#xff0c;执行c文件都是经历以下步骤: 编译文件生成exe文件执行该exe文件 我们先手动完成这两部 手动编译文件使用指令 gcc {你的c文件} -o {生成文件名}生成exe文件 第二步运行exe直接点击该文…...

【C++】读取数量不定的输入数据

读取数量不定的输入数据 似乎是一个很实用的东西&#xff1f; 问题&#xff1a; 我们如何对用户输入的一组数&#xff08;事先不知道具体有多少个数&#xff09;求和&#xff1f; 这需要不断读取数据直至没有新的输入为止。&#xff08;所以我们的代码就是这样设计的&#x…...

ESC字符背后的故事(27 <> 033 | x1B ?)

ANSI不可见字符转义&#xff0c;正确的理解让记忆和书写变得丝滑惬意。 (笔记模板由python脚本于2024年11月26日 15:05:33创建&#xff0c;本篇笔记适合python 基础扎实的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xf…...

基于NXP LS1043 OpenWRT智能交通边缘网关设计

0 引言 城市公共交通是与人们生产生活息息相关的重 要基础设施&#xff0c;是关系国计民生的社会公益事业。“城 市公共交通发展的十三五规划”明确指出&#xff1a;建设与移 动互联网深度融合的智能公交系统&#xff1b;推进“互联网 城市公交”发展&#xff1b;推进多元…...

绪论相关题目

1.在数据结构中,从逻辑上可以把数据结构分成( C)。 A. 动态结构和静态结构 B. 紧凑结构和非紧凑结构 C. 线性结构和非线性结构 D. 内部结构和外部结构 2.在数据结构中,从存储结构上可以将之分为( B)。 A. 动态结构和静态结构 B. 顺序存储和非顺序存储 C. 紧凑结构和非紧…...

中国科学院大学研究生学术英语读写教程 Unit7 Materials Science TextA 原文和翻译

中国科学院大学研究生学术英语读写教程 Unit7 Materials Science TextA 原文和翻译 Why Is the Story of Materials Really the Story of Civilisation? 为什么材料的故事实际上就是文明的故事&#xff1f; Mark Miodownik 1 Everything is made of something. Take away co…...

centos系列安装服务器时分区

服务器安装手动分区&#xff0c;标准分区(注意顺序)&#xff1a; 自定义标准分区 /boot/efi 200M&#xff1b;/boot 1G 放引导程序和内核文件及根文件&#xff1b; /var 磁盘1/10内存尽量大存放日志文件&#xff1b; /usr 磁盘1/10内存尽量大存在程序软件包&#xff1b; swap 虚…...

vue的理解

什么是vue vue是一套用于构建用户界面的渐进式框架&#xff0c;与其他框架不同的是&#xff0c;vue被设计为可以自底向上逐层应用&#xff0c;它也是创建单页面应用的web应用框架。vue的核心库只关注视图层&#xff0c;不仅易上手&#xff0c;还便于与第三方库或既有项目整合。…...

111. UE5 GAS RPG 实现角色技能和场景状态保存到存档

实现角色的技能存档保存和加载 首先&#xff0c;我们在LoadScreenSaveGame.h文件里&#xff0c;增加一个结构体&#xff0c;用于存储技能相关的所有信息 //存储技能的相关信息结构体 USTRUCT(BlueprintType) struct FSavedAbility {GENERATED_BODY()//需要存储的技能UPROPERT…...

抖音短视频矩阵源代码部署搭建流程

抖音短视频矩阵源代码部署搭建流程 1. 硬件准备 需确保具备一台性能足够的服务器或云主机。这些硬件设施应当拥有充足的计算和存储能力&#xff0c;以便支持抖音短视频矩阵系统的稳定运行。 2. 操作系统安装 在选定的服务器或云主机上安装适合的操作系统是关键步骤之一。推…...

leetcode - LRU缓存

什么是 LRU LRU (最近最少使用算法), 最早是在操作系统中接触到的, 它是一种内存数据淘汰策略, 常用于缓存系统的淘汰策略. LRU算法基于局部性原理, 即最近被访问的数据在未来被访问的概率更高, 因此应该保留最近被访问的数据. 最近最少使用的解释 LRU (最近最少使用算法), 中…...

计算机网络八股整理(一)

计算机网络八股文整理 一&#xff1a;网络模型 1&#xff1a;网络osi模型和tcp/ip模型分别介绍一下 osi模型是国际标准的网络模型&#xff0c;它由七层组成&#xff0c;从上到下分别是&#xff1a;应用层&#xff0c;表示层&#xff0c;会话层&#xff0c;传输层&#xff0c;…...

了解 CSS position 属性

CSS position 属性 在前端开发中&#xff0c;布局是一个至关重要的部分&#xff0c;而 CSS 的 position 属性是控制元素在页面中位置的核心工具。 本文将解释 CSS 中的 position 属性&#xff0c;包括其不同的值、效果及典型使用场景&#xff0c;以帮助你更好地理解和应用这一…...

数据结构 【二叉树(上)】

谈到二叉树&#xff0c;先来谈谈树的概念。 1、树的概念及结构 树是一种非线性的数据结构&#xff0c;它的逻辑关系看起来像是一棵倒着的树&#xff0c;也就是说它是根在上&#xff0c;而叶子在下的&#xff0c; 在树这种数据结构中&#xff0c;最顶端的结点称为根结点。在树的…...

C++11(中)

C11&#xff08;中&#xff09; 1.可变参数模板1.1.使用场景 2.lambda表达式&#xff08;重要&#xff09;2.1.使用说明2.2.函数对象与lambda表达式 3.线程库3.1.thread3.2.atomic原子库操作3.3.mutex3.3.1.mutex的种类3.3.2.lock_guard3.3.3.unique_lock &#x1f31f;&#x…...

下拉选择器,选择框,支持单选、多选、筛选和清空功能,支持vue2和vue3

下拉选择器&#xff0c;选择框&#xff0c;支持单选、多选、筛选和清空功能&#xff0c;支持vue2和vue3https://ext.dcloud.net.cn/plugin?id8159 点击即可。 注意数据来源&#xff1a; 选择的&#xff1a;valueName&#xff1a;选择下拉选择显示的显示屏...

HTTP中GET和POST的区别是什么?

HTTP定义&#xff1a; GET&#xff1a;用于获取资源&#xff0c;通常用于请求数据而不改变服务器的状态 POST&#xff1a;用于提交数据到服务器&#xff0c;通常会改变服务器的状态或产生副作用&#xff08;如创建或更新资源&#xff09; 参数传递方式&#xff1a; GET&…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

在 Spring Boot 项目里,MYSQL中json类型字段使用

前言&#xff1a; 因为程序特殊需求导致&#xff0c;需要mysql数据库存储json类型数据&#xff0c;因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...