数据结构 ——— 顺序表oj题:二进制求和

目录

题目要求

代码实现


题目要求

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

示例 1:

复制代码
输入:a = "11", b = "1"
输出:"100"

示例 2:

复制代码
输入:a = "1010", b = "1011"
输出:"10101"

代码实现

代码演示:

复制代码
void reverse(char* s)
{
	int left = 0;
	int right = strlen(s) - 1;

	while (left < right)
	{
		char tmp = s[left];
		s[left] = s[right];
		s[right] = tmp;

		left++;
		right--;
	}
}

char* addBinary(char* a, char* b)
{
	int alen = strlen(a);
	int blen = strlen(b);

	// 考虑到进位和'\0',所以开辟的空间要加 2
	int slen = alen > blen ? alen + 2 : blen + 2;
	char* str = (char*)malloc(sizeof(char) * slen);

	// 判断是否开辟成功
	if (str == NULL)
	{
		perror("malloc");
		return NULL;
	}

	// 反转 a 和 b 字符串,便于计算
	reverse(a);
	reverse(b);

	int carry = 0; //判断是否进位
	int sum = 0; //每一位的和

	for (int i = 0; i < slen - 2; i++)
	{
		if (i < alen && i < blen)
			sum = (a[i] - '0') + (b[i] - '0') + carry;
		else if (i < alen)
			sum = (a[i] - '0') + carry;
		else
			sum = (b[i] - '0') + carry;
		
		if (sum < 2)
		{
			str[i] = sum + '0';

			carry = 0;
		}
		else
		{
			if (sum == 2)
				str[i] = '0';
			else
				str[i] = '1';

			carry = 1;
		}
	}

	if (carry == 1)
		str[slen - 2] = '1';
	else
		slen--;

	str[slen - 1] = '\0';

	reverse(str);
	
	return str;
}

代码解析:

先将 a 和 b 字符串反转,便于计算,而且计算的和要开的空间为 a 和 b 字符串中长度最大的再加 2 ,因为要考虑到进位和放置'\0'

创建变量 carry ,用于记录进位的状态,再利用 sum 把 a 和 b 对应数字和 carry 相加,再判断复制入 str 字符串中

最后再判断 carry 是否为 1 ,为 1 就再赋值,否则就 str 长度减1

代码验证:

算法的时间和空间复杂度:

for 循环执行了 N 次,每次内部常数次,额外开辟了 N + 2 的空间(去掉常数项)得出:

时间复杂度:O(N)

空间复杂度:O(N)

相关推荐
2601_962218612 小时前
万象生鲜系统业财一体化底层打通技术自动生成经营账单
大数据·数据库·人工智能·python·算法
吞下星星的少年·-·3 小时前
The 2026 ICPC Asia East Continent Online Contest (II)(构造)
数据结构·算法
派葛穆3 小时前
Lerobot -飞特舵机ST-3215双舵机联动(ESP_NOW)
c语言
零依赖极客4 小时前
Day 6·1 ARMv8.2 dotprod——vdotq_s32 一条指令做 4 个点积
c语言·开发语言·人工智能·矩阵·arm·vllm
stolentime4 小时前
洛谷P10515 转圈题解
c++·算法·数学建模·贪心算法
和裕5 小时前
蜂窝板 vs 七层瓦楞重型纸箱:大件工业设备运输性能与成本全对比
大数据·运维·网络·人工智能·算法
衡石科技5 小时前
Data_Agent记忆机制与经验复用衡石分析智能体会话记忆与长期学习技术解析
人工智能·科技·学习·算法·企业级bi
Msshu1236 小时前
2~5串锂电快充优选|XSP36 Type‑C升压/升降压快充管理芯片
数据结构·随机森林·贪心算法·排序算法·线性回归·启发式算法
shirsl7 小时前
算法 Day 2 滑动窗口 + 栈 / 单调栈
开发语言·python·算法
老王爱玩车7 小时前
深入理解指针2
c语言·开发语言·学习