【C】67 二进制求和

embedded/2024/9/20 8:57:40/ 标签: c语言, 算法, 数据结构

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

#include <stdio.h>
#include <stdlib.h>
#include <string.h>char* addBinary(char* a, char* b) {if (a == NULL || b == NULL) {return NULL;}int len_a = strlen(a);int len_b = strlen(b);int size = (len_a > len_b ? len_a : len_b) + 1; // 加一位给可能的进位char* res = (char*)malloc((size + 1) * sizeof(char)); // +1 用于存放结尾的 '\0'res[size] = '\0'; // 确保字符串末尾为 '\0'size--;int carry = 0; // 进位while (len_a > 0 || len_b > 0) {int num_a = (len_a > 0) ? (a[--len_a] - '0') : 0;int num_b = (len_b > 0) ? (b[--len_b] - '0') : 0;int sum = num_a + num_b + carry;res[size--] = (sum % 2) + '0'; // 取余数并转换为字符carry = sum / 2; // 计算进位}if (carry) { // 如果最高位有进位res[size--] = carry + '0';}return res + size + 1; // 返回实际的字符串起始地址
}int main() {char a[] = "1011";char b[] = "101";char* result = addBinary(a, b);printf("Sum: %s\n", result);free(result); // 释放动态分配的内存return 0;
}

通过遍历两个字符串的每一位,进行加法运算并考虑进位,最终得到结果
注意:
返回 res 并不总是会得到正确的结果,因为 res 指向的是结果字符串的起始位置,而结果字符串可能会比 res 所指向的位置长一位,这取决于是否有进位产生。
在没有进位的情况下,结果字符串的长度将比输入字符串的长度长一位,因为需要多出一个位置来存储进位。在这种情况下,返回 res 将不会得到正确的结果,因为它指向的是结果字符串的起始位置,而不包括额外的进位位置。
因此,为了确保返回的是结果字符串的正确起始地址,应该返回 res + size + 1。这样做的原因是,size 在计算结果时被递减到了结果字符串的起始位置前一个位置,加上 1 之后指向了结果字符串的起始位置。
所以,返回 res + size + 1 可以确保我们返回的是结果字符串的正确起始地址,而不是 res 的起始地址

时间复杂度分析
遍历输入的两个二进制字符串,需要线性时间,即 O(max(m, n)),其中 m 和 n 分别是字符串 a 和 b 的长度。
在遍历过程中,执行加法运算和更新结果数组的操作需要常数时间。
最终返回结果需要反转结果字符串,其时间复杂度也是线性的,为 O(max(m, n))。
综上所述,addBinary 函数的时间复杂度为 O(max(m, n))。

空间复杂度分析
除了存储结果外,我们只使用了常数额外的空间。
结果字符串的长度最多为 max(m, n) + 1,因为可能存在进位。
因此,addBinary 函数的空间复杂度为 O(max(m, n))。


http://www.ppmy.cn/embedded/34554.html

相关文章

shamefully-hoist = true

在根目录下创建npm的配置文件.npmrc&#xff0c;增加配置项 shamefully-hoist true 是一个在 pnpm&#xff08;一个快速的、磁盘效率高的包管理器&#xff09;中使用的配置选项。pnpm 的主要特点之一是它使用硬链接和符号链接来避免复制相同的包到每个项目的 node_modules 文件…

数据结构===树

文章目录 概要概念相关概念 有哪些常用的树小结 概要 树是一种新的数据结构&#xff0c;不同于数组&#xff0c;链表。就像大自然中的树&#xff0c;看下这个数据结构&#xff0c;很有意思&#xff0c;有一个主干&#xff0c;然后还有很多树叉&#xff0c;即支干。不错&#xf…

uniapp 应用闪退、崩溃异常日志捕获插件(可对接网络上报)插件 Ba-Crash

应用闪退、崩溃异常日志捕获插件&#xff08;可对接网络上报&#xff09; Ba-Crash 简介&#xff08;下载地址&#xff09; Ba-Crash 是一款uniapp应用闪退、崩溃异常日志捕获插件&#xff0c;支持对接网络上报、设置提示等等&#xff0c;方便对一些远程问题、原生问题进行分…

影响外汇交易盈利的因素有哪些?

外汇交易就是通过汇率的差价来赚取相应的利润。在外汇交易中&#xff0c;投资者是否可以盈利&#xff0c;主要取决于是否正确的判断了市场趋势和行情。投资者在交易过程中受到主观和客观的因素影响&#xff0c;具体包含这些内容。 影响外汇交易盈利的因素有哪些&#xff1f; 1、…

老阳:跨境选品师怎么做更容易赚钱?

在跨境电商日益繁荣的今天&#xff0c;跨境选品师作为供应链上的重要一环&#xff0c;其职责与收入也备受关注。如何成为一名优秀的跨境选品师&#xff0c;并在这一岗位上赚得更多呢?以下是一些建议。 一、精准把握市场趋势 跨境选品师需要具备敏锐的市场洞察力&#xff0c;能…

富格林:了解黑幕套路正规方法预防

富格林悉知&#xff0c;存于市场中的黑幕亏损&#xff0c;不仅扰乱市场秩序&#xff0c;还使得不少的投资者受害亏损&#xff0c;面对诱导黑幕陷阱&#xff0c;一定要注意采取正规的方法防范避免受害亏损。投资者在进入市场之前&#xff0c;可从黑幕案件中了解黑幕亏损原因&…

AutoGroup是一种推荐场景的自动特征交互建模算法 采用了高效的分组算法 基于机器学习的选项,通过训练模型进行智能划分,确保结果的合理性。

AutoGroup AutoGroup是一种推荐场景的自动特征交互建模算法,其核心功能是基于预定义的规则或机器学习模型,自动将输入数据集分成多个组。这种分组功能可以应用于各种场景,如用户细分、市场分析、学术研究等。 在技术层面,AutoGroup采用了高效的分组算法,使得其能够在大规…

力扣题目101:对称二叉树

题目描述 给定一个二叉树&#xff0c;检查它是否是镜像对称的。 输入格式 root&#xff1a;二叉树的根节点。 输出格式 返回布尔值&#xff0c;表示树是否对称。 示例 示例 1 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;True 示例 2 输入&#xff1a;ro…

亚马逊Lazada速卖通卖家必备:利用自养号测评提升店铺排名与销量

Wish与亚马逊、速卖通、eBay等知名的跨境电商平台有所区别&#xff0c;它专注于移动端市场。对于许多初次涉足跨境电商领域的新手卖家而言&#xff0c;他们往往困惑于如何在Wish上起步&#xff0c;因为该平台的运营模式与其他平台有所不同。Wish是一款基于手机端App的跨境电商平…

帮助命令

1.man 原意&#xff1a;manual 所在路径&#xff1a;/usr/bin/man 执行权限&#xff1a;所有用户 语法&#xff1a;man [命令或配置文件] 功能描述&#xff1a;获得帮助信息 例&#xff1a;$ man ls 查看ls命令的帮助信息 查看命令的帮助主要是看这个命令是干什么用的&am…

Boolean 类型转换

为了更贴近原生 boolean attributes 的行为&#xff0c;声明为 Boolean 类型的 props 有特别的类型转换规则。以带有如下声明的 <MyComponent> 组件为例&#xff1a; defineProps({disabled: Boolean }) 该组件可以被这样使用 <!-- 等同于传入 :disabled"true…

视频的二维码是怎么做的?快速实现扫码看视频的方法

视频的二维码现在有很多的应用场景&#xff0c;用这种方式来分享视频能够实现视频的快速传播&#xff0c;现在用户大多习惯通过扫码的方式来获取信息&#xff0c;二维码可以提供更好的用户体验。 以二维码为媒介来存储视频时&#xff0c;可以使用视频二维码生成器来快速制作相…

Py深度学习基础|python中类的特殊方法-__getitem__()

1.基本介绍 在Python中&#xff0c;__getitem__是一个特殊方法&#xff08;也常被称为“魔术方法”&#xff0c;即双下划线方法&#xff09;&#xff0c;它使一个类的实例对象能够支持通过键来获取其内部数据&#xff0c;类似于操作列表、元组或字典的方式。当你尝试使用方括号…

递归、搜索与回溯算法:记忆化搜索

例题一 解法&#xff08;暴搜 -> 记忆化搜索 -> 动态规划&#xff09;&#xff1a; 算法思路&#xff1a; 暴搜&#xff1a; a. 递归含义&#xff1a;给 dfs ⼀个使命&#xff0c;给他⼀个数 n &#xff0c;返回第 n 个斐波那契数的值&#xff1b; b. 函数体&…

VScode添加c/c++头文件路径

1.设置工作区include path方法&#xff1a; 命令面板 -> 输入c/c 修改配置文件&#xff0c;添加路径&#xff1a; 2.全局路径&#xff1a; 设置 - > 搜索include path

Noir Dark Mode for Safari:夜间浏览的舒适伴侣

Noir Dark Mode for Safari是一款实用的浏览器插件&#xff0c;它使夜间浏览网页变得更加轻松和舒适。通过自动为访问的每个网站添加暗色模式&#xff0c;Noir减少了用户在暗光环境下浏览网页时可能产生的眼睛疲劳。 Noir的自定义功能允许用户根据自己的喜好调整暗色模式的设置…

力扣每日一题112:路径总和

题目 简单 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所有节点值相加等于目标和 targetSum 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 叶子节点 是…

【MySQL】第一次作业

【MySQL】第一次作业 1、在官网下载安装包2、解压安装包&#xff0c;创建一个dev_soft文件夹&#xff0c;解压到里面。3、创建一个数据库db_classes4、创建一行表db_hero5、将四大名著中的常见人物插入这个英雄表 写一篇博客&#xff0c;在window系统安装MySQL将本机的MySQL一定…

第 129 场 LeetCode 双周赛题解

A 构造相同颜色的正方形 枚举&#xff1a;枚举每个 3 3 3\times 3 33的矩阵&#xff0c;判断是否满足条件 class Solution {public:bool canMakeSquare(vector<vector<char>>& grid) {for (int i 0; i < 2; i)for (int j 0; j < 2; j) {int c1 0, c…

sql编写规范(word原件)

编写本文档的目的是保证在开发过程中产出高效、格式统一、易阅读、易维护的SQL代码。 1 编写目的 2 SQL书写规范 3 SQL编写原则 软件全套资料获取进主页或者本文末个人名片直接获取。