数据结构 ——— 顺序表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)

相关推荐
hansang_IR6 小时前
【讲解】CSP-S2026 第一轮初赛
c++·算法
hanlin036 小时前
刷题笔记:力扣第76题-最小覆盖子串
笔记·算法·leetcode
Zane19946 小时前
比较排序跑不出O(nlogn)是数学上证明过的,计数、桶、基数排序凭什么能绕开这堵墙
算法·排序算法
tiger8656 小时前
大语言模型面试和题解,梳理中国主流开源 LLM 系列的发展脉络、技术路线与工程取舍
人工智能·gpt·深度学习·算法·自然语言处理·面试·transformer
我不会起名字3227 小时前
一天一道力扣Hot100(36):深度优先算法---组合总和
数据结构·c++·后端·python·算法·go
学生小羊7 小时前
C++ 初阶 学习博客
c语言·c++·c++与c语言的区别·c++基础学习
雨落在了我的手上7 小时前
Java数据结构(十五):哈希表
数据结构
虚无的纽扣7 小时前
【力扣刷题】第三天:有效三角形的个数、快乐数
算法·排序算法
tiger8657 小时前
大语言模型面试和题解,Context Engineering 怎么做?长 Prompt、动态上下文与 Memory 管理
人工智能·深度学习·算法·语言模型·自然语言处理·面试·nlp
无忧.芙桃8 小时前
数据结构之排序算法(中):冒泡排序与快速排序,从相邻交换到工程级优化
c语言·c++·排序算法