leetcode:67. 二进制求和

news2024/10/6 14:33:53

题目:

 

函数原型:

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个空间,还有一个空间用于存放\0
	memset(ans, '0', sizeof(char) * (n + 2));//全部初始化为0
	int 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';//当前位置为0
			ans[i + 1] = ans[i + 1] - '0' + 1 + '0';//进位操作
		}
		if (ans[i] == '3')//进位判断(1+1的情况,前一位进位1)
		{
			ans[i] = '1';//当前位置为1
			ans[i + 1] = ans[i + 1] - '0' + 1 + '0';//进位操作
		}
		i++;
	}
	//判断是否字符串长度增加(是否进位)
	if (ans[i] != '0')//进位了
	{
		ans[i + 1] = '\0';//最后一位置为\0
	}
	else//没有进位
	{
		ans[i] = '\0';//最后一位和倒数第二位都置为\0
		ans[i + 1] = '\0';
	}
	reserve(ans);//逆序昕字符串

	return ans;//返回新字符串
}

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

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

相关文章

前端vue按钮控制切换按钮是否禁用和颜色和显示隐藏,利用v-if和v-else

效果 未输入input前图片 输入input后图片 html <input type"number" placeholder"请输入分润数量" placeholder-class"shareprofit_placeholder_num" v-model"money"> <!-- 金钱 --> {{money}} <!-- 可提现余额 --&g…

518电脑端抽奖软件,可用作婚庆大屏幕滚动抽奖

518抽奖软件简介 518抽奖软件&#xff0c;518我要发&#xff0c;超好用的年会抽奖软件&#xff0c;简约设计风格。 包含文字号码抽奖、照片抽奖两种模式&#xff0c;支持姓名抽奖、号码抽奖、数字抽奖、照片抽奖。(www.518cj.net) 婚礼抽奖活动意义 抽奖类似于买彩票&#x…

大数据技术之Hive:先导篇(一)

目录 一、什么是Hive 二、思考如何设计出Hive功能 2.1 提问 2.2 案例分析 2.3 小结 三、掌握Hive的基础架构 3.1 Hive组件 - 元数据存储 3.2 Hive组件 - Driver驱动程序 3.3 Hive组件 - 用户接口 一、什么是Hive 什么是分布式SQL计算 我们知道&#xff0c;在进行数据统…

cf 交互题

今天cf遇到了交互题&#xff0c;这个交互题的算法很很很简单&#xff0c;但是在交互上卡了&#xff0c;导致交上的代码都不算罚时。&#xff08;更伤心了。 所以&#xff0c;现在写一下交互题的做法&#xff0c;印象深刻嘛。 交互题&#xff0c;就是跟机器进行交互。你代码运…

开始撸 Android 源码

启动找工作模式&#xff0c;发现无比困难。搁在往日&#xff0c;大龄程序员找工作都是一件困难的事情&#xff0c;加上今年形势很差&#xff0c;更是难上加难。关键是我这十几年来主攻的浏览器内核方向&#xff0c;需求量更是几乎为零。在 BOSS 直聘上以 Chromium 为关键词&…

DeepSpeed

DeepSpeed概念 DeepSpeed中用到的技术包括以下几个等级&#xff1a; ZeRO-1&#xff1a;只对optimizer进行切片后分布式保存 ZeRO-2&#xff1a;对optimizer和grad进行切片后分布式保存 ZeRO-3&#xff1a;对optimizer、grad和模型参数进行切片后分布式保存 offload&#xff1…

【RocketMQ】设计理念与核心概念扫盲

【RocketMQ】设计理念与核心概念扫盲 文章目录 【RocketMQ】设计理念与核心概念扫盲一、RocketMQ的设计理念和目标1.1、设计理念1.2、设计目标 二、RocketMQ的核心概念扫盲篇2.1、部署架构2.1.1、Nameserver2.1.2、Broker2.1.3、Client 2.2、消息订阅模型2.2.1、消费模式2.2.2、…

【C++基础】简单工程模式、工厂模式、抽象工程模式

本文参考&#xff1a;简单工厂模式 - 人造恶魔果实工厂1 | 爱编程的大丙​​​​​​ ​​​​​​工厂模式 - 人造恶魔果实工厂2 | 爱编程的大丙​​​​​ ​​​​​抽象工厂模式 - 弗兰奇一家 | 爱编程的大丙 工厂我们就可以得到想要的东西&#xff0c;在程序设计中&…

Nacos使用和注册部分源码介绍

Nacos简单介绍 Nacos致力于帮助您发现、配置和管理微服务。Nacos提供了一组简单易用的特性集&#xff0c;帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos是构建以“服务”为中心的现代应用架构 (例…

社群团购对接,【概率思维】可以增加你做项目的成功率!

社群团购对接&#xff0c;【概率思维】可以增加你做项目的成功率&#xff01; 今天来聊一个关于概率的问题&#xff0c;我们不管去做社群团购项目、做流量&#xff0c;还是做销售&#xff0c;我们都要有概率思维&#xff0c;有了这个思维以后&#xff0c;就可以增加你的成功率…

input输入框从右边开始输入,光标靠左移动

未设置前 光标在左边 <input type"number" placeholder"请输入分润数量" placeholder-class"shareprofit_placeholder_num" v-model"money">设置后 光标在右边 <input type"number" placeholder"请输入分润数…

C#开发的OpenRA游戏之调试菜单1

C#开发的OpenRA游戏之调试菜单1 在开发一个游戏里,经常需要提供一些调试设置,以便快速地达到需要测试的阶段,否则按正常游戏的进程,就会需要比较久的时间,这样浪费开发人员的时间。 在OpenRA提供一个调试菜单,它就是在下面的界面里: 这个菜单叫做 Debug Menu,当玩家点…

关于游戏开发,还有这些信息你可能不知道

游戏开发是一个复杂而令人兴奋的领域&#xff0c;有许多人不知道的有趣事实和趋势。以下是一些可能令你感兴趣的游戏开发领域的事实&#xff1a; 游戏开发是巨大的产业&#xff1a; 游戏产业已经成为世界上最大的娱乐产业之一&#xff0c;超过电影和音乐产业。这包括移动游戏、…

综合续航达1040公里:腾势计划2024年在香港上市,售价60-100 万

腾势汽车表示&#xff0c;他们计划于2024年在香港地区上市全新的D9车型。这款中大型高端新能源MPV是通过DM-i超级混动技术打造的&#xff0c;由于综合续航能力达到1040公里&#xff0c;且纯电续航最大可达190公里&#xff0c;这款车已经引起了广泛关注。据腾势销售事业部总经理…

华为云云耀云服务器L实例评测|教你如何使用云服务器L实例

目录 一、为什么选择华为云云耀云服务器L实例1、智能不卡顿2、价优随心用3、上手更简单4、管理特省心 二、服务器快速上手1、注册账号2、查看华为云耀云服务器L实例产品信息3、购买4、查看服务器详情5、远程登录6、通过第三方终端连接 三、宝塔面板管理服务器 本篇文章给大家分…

分享一个宝贝,如果你对新奇世界感兴趣,这个绝对不能错过

昨晚没怎么睡好&#xff0c;迷迷糊糊到天亮&#xff0c;6点多起床后反思&#xff0c;应该是因为今天周一&#xff0c;要上班&#xff0c;所以晚上没睡好&#xff0c;好像这叫“周一综合症”&#xff0c;即不想上班。 周末两天其实也没做啥&#xff0c;翻完小说《动物农场》&…

「AIGC」智能美学,AI绘画 API 激发无限创意

引言 随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;AI绘画 API 正在以惊人的速度改变艺术创作的面貌。它不仅为艺术家和创作者提供了全新的创作工具&#xff0c;还激发了无限的创意和想象力。在这个智能美学的时代&#xff0c;让我们一起探索 AI 绘画 AP…

Three.js-矩形块shader

自定义shader代码在文末 调用方式&#xff1a; new AudioMaterial({ row: 10,column: 5,start: new Color("#00CC99"),end: new Color("#d3039c"),brightness: "(p.y < fft && p.y > fft -0.1)" })就是这样 这样 默认不传递fre…

Neo4j安装教程及版本匹配

Neo4j简介 Neo4j是基于java的图形数据库&#xff08;即环境中需预先安装jdk&#xff0c;jdk8是免费的&#xff0c;但是jdk11及更高的版本是收费的&#xff09;&#xff1b;开源&#xff1b;NoSQL(非关系型数据库) windows环境中neo4j与jdk版本的对应关系 neo4j版本jdk版本3.58…

AUTOSAR-UDS诊断

目录 一.AutoSAR 诊断功能概述 二.UDS 服务分类 诊断报文格式 &#xff08;1&#xff09;带有子服务的请求报文 &#xff08;2&#xff09;不带子服务的请求报文 &#xff08;3&#xff09;含有子服务正响应报文 &#xff08;4&#xff09;不含子服务正响应报文 &#…