leetcode:67. 二进制求和

题目:

 

函数原型:

char * addBinary(char * a, char * b)

思路:

二进制相加,首先我们考虑先将字符串逆序。由此要写一个逆序函数reserve。字符串逆序后,从前往后相加,以较长的字符串的长度为标准长度n,另一未达标准长度字符串以 ‘0’ 补充(需要用辅助变量进行辅助相加,不可越界赋值为 ‘0’ )。创建新的字符串ans,申请空间为 n+2 个单位,初始化全部为 ‘0’ 。将两个字符串相加后的结果存入ans中,这里需要进行字符型数字与整型数字的转换。全部相加完成后,判断第 n+1 哥字符是否为 ‘0’ (初始时为 ‘0’),若仍为 ‘0’ 说明最后一位相加未进位,新字符串长度为 n+1 ,第 n+1 位赋值 ‘\0’,第n+2位也赋值为 ‘\0’;若不为 ‘0’ 说明最后一位相加进位了,第 n+1 位有值,将第 n+2 位赋值为 ‘\0’。最后再逆序新字符串ans(字符串逆序只会逆序 ‘\0’ 之前的字符),返回新字符串ans

 

关键1:为什么要将字符串逆序后再进行相加?

因为二进制相加可能会有进位问题,新字符串长度可能加1。如果不逆序,需要从后向前相加,前面留几个空间取决于相加后会不会进位,无法确定。相反,逆序后,从前向后相加,后面可以多留一个空间用于进位,如果没有进位该空间可置为 '\0' ,不影响字符串的再逆序。

 

关键2:为什么新的字符串要申请 n+2 个空间?

因为二进制相加后可能会进位,需要预留一个空间,再多申请一个空间用于存放 ‘\0’ 作为字符串结束标志。所以一共要多申请两个空间。

 

关键3:如何进行字符型数字于整型数字的转换?

字符型数字转整型数字:- ‘0’

整型数字转字符型数字:+ ‘0’

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <memory.h>void reserve(char* arr)//逆序字符串
{int left = 0;int right = strlen(arr) - 1;while (left <= right){char tmp = '0';tmp = arr[left];arr[left] = arr[right];arr[right] = tmp;left++;right--;}
}char* addBinary(char* a, char* b) 
{reserve(a);//逆序方便相加reserve(b);//逆序方便相加int sizea = strlen(a);//求长度int sizeb = strlen(b);//求长度int n = sizea > sizeb ? sizea : sizeb;//记下最大的长度char* ans = (char*)malloc(sizeof(char) * (n + 2));//创建最大长度+2的空间,因为可能要进位1个空间,还有一个空间用于存放\0memset(ans, '0', sizeof(char) * (n + 2));//全部初始化为0int i = 0;char aa = '0';//辅助变量char bb = '0';//辅助变量while (i < n){if(i>=sizea||i>=sizeb){if (i >= sizea)//判断相加时是否超出自己的长度,超出则补0处理{ans[i] = ans[i] - '0' + aa - '0' + b[i] - '0' + '0';}if (i >= sizeb)//判断相加时是否超出自己的长度,超出则补0处理{ans[i] = ans[i] - '0' + a[i] - '0' + bb - '0' + '0';}}else{ans[i] = ans[i] - '0' + a[i] - '0' + b[i] - '0' + '0';//新的字符串结果}if (ans[i] == '2')//进位判断(1+1的情况,前一位无进位){ans[i] = '0';//当前位置为0ans[i + 1] = ans[i + 1] - '0' + 1 + '0';//进位操作}if (ans[i] == '3')//进位判断(1+1的情况,前一位进位1){ans[i] = '1';//当前位置为1ans[i + 1] = ans[i + 1] - '0' + 1 + '0';//进位操作}i++;}//判断是否字符串长度增加(是否进位)if (ans[i] != '0')//进位了{ans[i + 1] = '\0';//最后一位置为\0}else//没有进位{ans[i] = '\0';//最后一位和倒数第二位都置为\0ans[i + 1] = '\0';}reserve(ans);//逆序昕字符串return ans;//返回新字符串
}

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

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

相关文章

可视化大屏设计模板 | 主题皮肤(报表UI设计)

下载使用可视化大屏设计模板&#xff0c;减少重复性操作&#xff0c;提高报表制作效率的同时也确保了报表风格一致&#xff0c;凸显关键数据信息。 软件&#xff1a;奥威BI系统&#xff0c;又称奥威BI数据可视化工具 所属功能板块&#xff1a;主题皮肤上传下载&#xff08;数…

Python实现机器学习(下)— 数据预处理、模型训练和模型评估

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。本门课程将介绍人工智能相关概念&#xff0c;重点讲解机器学习原理机器基本算法&#xff08;监督学习及非监督学习&#xff09;。使用python&#xff0c;结合sklearn、Pycharm进行编程&#xff0c;介绍iris&#xff08;鸢尾…

Excel学习 WPS版

Excel学习 1.界面基础1.1 方格移动快捷键1.2 自动适配文字长度1.3 跨栏置中1.4 多个单元格同宽度&#xff1a;1.5 下拉框选择1.6 打印预览1.7 绘制边框1.8 冻结一行多行表头1.9 分割视图 2.日期相关2.1 今日日期快捷键2.2 月份提取 3.数学公式3.1 自动增长3.2 排序3.3 筛选3.4 …

数据结构——排序算法——冒泡排序

冒泡排序1 void swap(vector<int> arr, int i, int j) {int temp arr[i];arr[i] arr[j];arr[j] temp;}void bubbleSort1(vector<int> arr) {for (int i 0; i < arr.size() - 1; i){for (int j 0; j < arr.size() - 1 - i; j){if (arr[j] > arr[j 1…

【Unity编辑器扩展】| 顶部菜单栏扩展 MenuItem

前言【Unity编辑器扩展】 | 顶部菜单栏扩展 MenuItem一、创建多级菜单二、创建可使用快捷键的菜单项三、调节菜单显示顺序和可选择性四、创建可被勾选的菜单项五、右键菜单扩展5.1 Hierarchy 右键菜单5.2 Project 右键菜单5.3 Inspector 组件右键菜单六、AddComponentMenu 特性…

人工智能:神经细胞模型到神经网络模型

人工智能领域中的重要流派之一是&#xff1a;从神经细胞模型&#xff08;Neural Cell Model&#xff09;到神经网络模型&#xff08;Neural Network Model&#xff09;。 一、神经细胞模型 第一个人工神经细胞模型是“MP”模型&#xff0c;它是由麦卡洛克、匹茨合作&#xff0…

Java-华为真题-预定酒店

需求&#xff1a; 放暑假了&#xff0c;小王决定到某旅游景点游玩&#xff0c;他在网上搜索到了各种价位的酒店&#xff08;长度为n的数组A&#xff09;&#xff0c;他的心理价位是x元&#xff0c;请帮他筛选出k个最接近x元的酒店&#xff08;n>k>0&#xff09;&#xff…

通常用哪些软件做数据可视化大屏?

一般就两种&#xff0c;一种是可视化大屏编辑软件&#xff0c;另一种则是BI系统&#xff08;BI数据可视化工具&#xff09;。考虑到数据来源多、数据量大以及数据分析效率、直观易懂性等实实在在的客观问题&#xff0c;建议采用BI系统来制作数据可视化大屏。 BI系统做可视化大…

【SpringMVC】JSR 303与interceptor拦截器快速入门

目录 一、JSR303 1、什么是JSR 303&#xff1f; 2、为什么要使用JSR 303&#xff1f; 3、JSR 303常用注解 3.1、常用的JSR 303注解 3.2、Validated与Valid区别 3.2.1、Validated 3.2.2、Valid 3.2.3、区别 4、使用案例 4.1、导入依赖 4.2、配置校验规则 4.3、编写…

Matlab图像处理-彩色图像基础

光谱 在17世纪60年代&#xff0c;人们普遍认为白光是一种没有其他颜色的纯色光&#xff0c;而彩色光是有某种缘故发生变化的光。为了验证这个假设&#xff0c;牛顿让一束阳光通过一面三棱镜&#xff0c;光线在墙上被分解成了八种不同的颜色&#xff0c;即&#xff1a;红、橙、…

vue基础知识九:动态给vue的data添加一个新的属性时会发生什么?怎样解决?

一、直接添加属性的问题 我们从一个例子开始 定义一个p标签&#xff0c;通过v-for指令进行遍历 然后给botton标签绑定点击事件&#xff0c;我们预期点击按钮时&#xff0c;数据新增一个属性&#xff0c;界面也 新增一行 <p v-for"(value,key) in item" :key&q…

python基于GDAL的多线程高速批量重采样、对齐栅格、对齐行列数,并无损压缩

在自己写代码处理遥感数据进行波段计算&#xff0c;或者基于遥感等空间数据进行机器学习、深度学习时&#xff0c;一般都需要各图层行列数一致。在QGIS中有“对齐栅格”工具可以完成该任务&#xff0c;但是QGIS中没有提供批量操作的接口&#xff0c;在数据比较多时&#xff0c;…

eslint写jsx报错

eslint写jsx报错 ChatGPT提示 在写JSX时&#xff0c;ESLint可能会报出一些语法错误&#xff0c;这些错误通常是由于ESLint默认配置中不支持JSX语法导致的。为了解决这些错误&#xff0c;我们需要在ESLint配置文件中启用对JSX语法的支持。 首先&#xff0c;需要安装eslint-pl…

时序分解 | MATLAB实现基于EWT经验小波变换的信号分解分量可视化

时序分解 | MATLAB实现基于EWT经验小波变换的信号分解分量可视化 目录 时序分解 | MATLAB实现基于EWT经验小波变换的信号分解分量可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 EWT经验小波变换 包含频谱相关系数 可直接运行 Matlab代码 1.可自由设置分量个数&…

SpringBoot整合Easy-ES操作演示文档

文章目录 SpringBoot整合Easy-ES操作演示文档1 概述及特性1.1 官网1.2 主要特性 2 整合配置2.1 导入POM2.2 Yaml配置2.3 EsMapperScan 注解扫描2.4 配置Entity2.5 配置Mapper 3 基础操作3.1 批量保存3.2 数据更新3.3 数据删除3.4 组合查询3.5 高亮查询3.6 统计查询 4 整合异常4…

prize_p1

文章目录 解题过程代码审计思路问题解决数组绕过preg_match__destruct的触发修改phar文件以及签名phar://支持的后缀 题解方法一&#xff08;数组绕过&#xff09;方法二&#xff08;gzip绕过&#xff09; 解题过程 源代码 <META http-equiv"Content-Type" conte…

AI文本创作在百度App发文的实践

作者 | 内容生态端团队 导读 大语言模型&#xff08;LLM&#xff09;指包含数百亿&#xff08;或更多&#xff09;参数的语言模型&#xff0c;这些模型通常在大规模数据集上进行训练&#xff0c;以提高其性能和泛化能力。在内容创作工具接入文心一言AI能力后&#xff0c;可以为…

论文复现--lightweight-human-pose-estimation-3d-demo.pytorch(单视角多人3D实时动作捕捉DEMO)

分类&#xff1a;动作捕捉 github地址&#xff1a;https://github.com/Daniil-Osokin/lightweight-human-pose-estimation-3d-demo.pytorch 所需环境&#xff1a; Windows10&#xff0c;conda 4.13.0&#xff1b; 目录 conda环境配置安装Pytorch全家桶安装TensorRT&#xff08;…

C++设计模式_05_Observer 观察者模式

接上篇&#xff0c;本篇将会介绍C设计模式中的Observer 观察者模式&#xff0c;和前2篇模板方法Template Method及Strategy 策略模式一样&#xff0c;仍属于“组件协作”模式。Observer 在某些领域也叫做 Event 。 文章目录 1. 动机&#xff08; Motivation&#xff09;2. 代码…

红帽 RHEL 源码限制成契机,AlmaLinux 获捐更可“做自己”

红帽在两个月前发布公告声称&#xff0c;将限制对 Red Hat Enterprise Linux (RHEL) 源代码的访问&#xff0c;早前曾报道&#xff0c;此举导致 AlmaLinux 、Rocky Linux 等 Linux 发行版未来发展严重受阻。 对于这一决策&#xff0c;AlmaLinux OS 基金会主席 Benny Vasquez 此…