当前位置: 首页 > news >正文

又是一年一度的1024,那就记录一篇算法博客吧~ 【二进制加法探秘】

前言: 又是一年一度的1024,那就记录一篇算法博客吧~ 内容如下~

1 题目介绍

给定两个二进制字符串 ab,需要返回它们的和,结果以二进制字符串形式给出。

示例 1:
输入: a = “11”, b = “1” 输出: “100”

示例 2:
输入: a = “1010”, b = “1011” 输出: “10101”

提示:

  • 1 <= a.length, b.length <= 104
  • ab 仅包含字符 '0''1'
  • 如果字符串不是 "0",则不会有前导零

2 解题思路

2.1 分析思路

一看到这个题目,脑子里立刻应该蹦出二进制的运算原理。简单来说,二进制加法与十进制有点类似,唯一的区别是逢“二”进一,而不是逢“十”进一。

我的思路是这样的:我们可以模拟两个二进制数相加的过程,从最低位(也就是最后一位)开始,一位一位进行加法。如果遇到 1 + 1 的情况,就会产生进位,这时我们需要引入一个变量来存储进位信息。

接下来,我们逐位相加,考虑两个数字以及进位的总和。如果总和大于等于 2,那就需要产生进位,并将相应的位上的结果保存下来。为了处理不同长度的二进制字符串,我的办法是,当其中一个字符串已经处理完了,另一个还未结束时,把结束的字符串当作全零处理,继续加法。

等到所有的位都加完之后,还要检查是否有进位没有处理。如果有进位,就再加上这个进位。

最后,由于我们是从最低位开始加的,因此需要将结果反转过来,转换成字符串输出。

2.2 代码实现

/**
@param {string} a
@param {string} b
@return {string} 
*/
var addBinary = function(a, b) { let arr_a = [], arr_b = [], arr_c = [], carry = 0, k = 0, result = ''; arr_a = a.split('');  // 将字符串转为字符数组arr_b = b.split('');  // 同样操作for (let i = arr_a.length - 1, j = arr_b.length - 1; i >= 0 || j >= 0; i--, j--) { let x = i >= 0 ? Number(arr_a[i]) : 0;  // 当前 a 位数,若 i 小于 0 则取 0let y = j >= 0 ? Number(arr_b[j]) : 0;  // 当前 b 位数,若 j 小于 0 则取 0let sum = x + y + carry;  // 相加的总和arr_c[k++] = sum % 2;  // 将计算结果存储在 arr_c 中carry = Math.floor(sum / 2);  // 更新进位}if (carry === 1) { arr_c[k++] = 1;  // 如果还有进位,继续加}arr_c.reverse();  // 翻转数组得到最终结果result = arr_c.join('');  // 将数组转为字符串输出return result; 
};

3 小结

这道题在 LeetCode 上属于简单题型,但实际上对于前端开发者来说,掌握这种算法已经可以应对不少场景了。尤其是在二进制运算中,我们不仅仅巩固了二进制的基础,还熟练掌握了 JavaScript 的数组操作方法,例如 splitreversejoin 等。

而且,刷这种题不仅有助于提升逻辑思维,还帮助我发现了许多细节上的优化技巧,真正达到了“温故而知新”的效果。在平时的开发工作中,遇到复杂逻辑时,这些基础算法和思维方式也能够给我们提供很多帮助。

感谢阅读!

  • 博主的前端个人网站:zhangqiang.hk.cn
  • 欢迎加入我的前端学习交流群:706947563,共同学习进步!

彩蛋:
今天收到女朋友的1024礼物,一件贴心小棉袄(羽绒服),开心_

相关文章:

又是一年一度的1024,那就记录一篇算法博客吧~ 【二进制加法探秘】

前言&#xff1a; 又是一年一度的1024&#xff0c;那就记录一篇算法博客吧~ 内容如下~ 1 题目介绍 给定两个二进制字符串 a 和 b&#xff0c;需要返回它们的和&#xff0c;结果以二进制字符串形式给出。 示例 1&#xff1a; 输入: a “11”, b “1” 输出: “100” 示例 2…...

LeetCode--买卖股票的最佳时机含冷冻期--动态规划

一、题目解析 二、算法原理 我们可以使用dp[i]来表示第i天买卖股票所获得的最大利润。由题可得我们只能持有一支股票&#xff0c;并且在卖出后有冷冻期的限制&#xff0c;因此我们会有三种不同的状态&#xff1a; 我们目前持有一支股票&#xff0c;对应的「累计最大收益」记为…...

装了Ubuntu和Windows双系统,如何设置默认启动Windows

可以将默认启动系统设置为Windows&#xff0c;以下是步骤&#xff1a; 1. 修改GRUB配置文件&#xff1a; • 启动到Ubuntu&#xff0c;打开终端。 • 编辑GRUB配置文件&#xff1a; sudo nano /etc/default/grub • 找到这一行&#xff1a; GRUB_DEFAULT0 将0改为对应Wi…...

WPF+MVVM案例实战-设备状态LED灯变化实现

文章目录 1、项目创建2、UI界面布局1. MainWindow.xaml2、颜色转换器实现2.MainViewModel.cs 代码实现 3、运行效果4.源代码下载 1、项目创建 打开 VS2022 &#xff0c;新建项目 Wpf_Examples&#xff0c;创建各层级文件夹&#xff0c;安装 CommunityToolkit.Mvvm 和 Microsof…...

MySQL--基本介绍

一.数据库前言 1.数据库的相关介绍 关系数据库管理系统&#xff08;Relational Database Management System&#xff1a;RDBMS&#xff09;是指包括相互联系的逻辑组织和存取这些数据的一套程序 (数据库管理系统软件)。关系数据库管理系统就是管理关系数据库&#xff0c;并将数…...

PAT甲级1008 Elevator

题目地址&#xff1a;1008 Elevator - PAT (Advanced Level) Practice (pintia.cn) 介绍 The highest building in our city has only one elevator. A request list is made up with N positive numbers. The numbers denote at which floors the elevator will stop, in spe…...

数据导入导出

1.数据加载 - LOAD 语法 LOAD DATA [LOCAL] INPATH filepath [OVERWRITE] INTO TABLE tablename; 操作: 建表 CREATE TABLE myhive.test_load( dt string comment 时间&#xff08;时分秒&#xff09; , user_id string comment 用户 ID, word string comment 搜索词 , u…...

git的安装以及入门使用

文章目录 git的安装以及入门使用什么是git&#xff1f;git安装git官网 git初始化配置使用方式初始化配置&#xff1a; git的安装以及入门使用 什么是git&#xff1f; Git 是一个免费开源的分布式版本控制系统&#xff0c;使用特殊的仓库数据库记录文件变化。它记录每个文件的…...

【acwing】算法基础课-搜索与图论

目录 1、dfs(深度优先搜索) 1.1 排列数字 1.2 n皇后问题 搜索顺序1 搜索顺序2 2、bfs(广度优先搜索) 2.1 走迷宫 2.2 八数码 3、树与图的存储 4、树与图的遍历 4.1 树的重心 4.2 图中点的层次 5、拓扑排序 6、最短路问题 6.1 朴素Dijkstra算法 6.2 堆优化Dijks…...

502 错误码通常出现在什么场景?

服务器过载场景 高流量访问&#xff1a;当网站遇到突发的高流量情况&#xff0c;如热门产品促销活动、新闻热点事件导致网站访问量激增时&#xff0c;服务器可能会因承受过多请求而无法及时响应。例如&#xff0c;电商平台在 “双十一” 等购物节期间&#xff0c;大量用户同时…...

面试经典算法题69-两数之和

面试经典算法题69-两数之和 公众号&#xff1a;阿Q技术站 LeetCode.1 问题描述 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。…...

在 Spring 框架中,循环依赖是指两个或多个 Bean 之间相互依赖

在 Spring 框架中&#xff0c;循环依赖是指两个或多个 Bean 之间相互依赖&#xff0c;形成一个闭环。例如&#xff0c;Bean A 依赖于 Bean B&#xff0c;而 Bean B 又依赖于 Bean A。这种情况如果不加以处理&#xff0c;会导致 Bean 无法正确实例化&#xff0c;从而引发应用程序…...

一文带你入门Flink CDC

1 CDC简介 1.1 什么是CDC CDC是Change Data Capture(变更数据获取)的简称。核心思想是,监测并捕获数据库的变动(包括数据或数据表的插入、更新以及删除等),将这些变更按发生的顺序完整记录下来,写入到消息中间件中以供其他服务进行订阅及消费。 1.2 CDC的种类 CDC主要…...

修复jenkins SSH 免密登录发布服务器

SSH 免密登录配置和修复步骤&#xff1a; 1. 配置 SSH 免密登录 在本地主机执行以下命令&#xff0c;将公钥复制到目标服务器&#xff1a; ssh-copy-id bjpark172.27.xx.xx输入密码完成公钥传输。 2. 修复 SSH 免密登录失败的权限问题 如果免密登录失败&#xff0c;用root…...

049_python基于Python的热门微博数据可视化分析

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍&#xff1a;CodeMentor毕业设计领航者、全网关注者30W群落&#xff0c;InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者&#xff0c;博客领航之星、开发者头条/腾讯云/AW…...

中国信通院联合中国电促会开展电力行业企业开源典型实践案例征集

自2021年被首次写入国家“十四五”规划以来&#xff0c;开源技术发展凭借其平等、开放、协作、共享的优秀创作模式&#xff0c;正持续成为推动数字技术创新、优化软件生产模式、赋能传统行业转型升级、助力企业降本增效的重要引擎。电力是国民经济的重要基础性产业&#xff0c;…...

LOAM 20.04 ros1安装

LOAM 安装 LOAM源码 安装参考 上述安装参考在 报错1、 C标准改为17 解决方案 数据集 试车实验...

Pyqt5设计打开电脑摄像头+可选择哪个摄像头(如有多个)

目录 专栏导读库的安装代码介绍完整代码总结 专栏导读 &#x1f338; 欢迎来到Python办公自动化专栏—Python处理办公问题&#xff0c;解放您的双手 &#x1f3f3;️‍&#x1f308; 博客主页&#xff1a;请点击——> 一晌小贪欢的博客主页求关注 &#x1f44d; 该系列文…...

mysqldump 批量导出数据库表

先查询需要导出的数据表&#xff0c;使用语句 SELECT table_name FROM information_schema.tables WHERE table_schema 数据库名 AND table_name LIKE mall%; 再批量导出查询到的表 mysqldump -u root -p test_yogasala mall_ad mall_address mall_admin mall_cart mall_…...

前端工程师面试题整理

前言 本文整理了一系列前端工程师面试中常见的 HTML、CSS 和 JavaScript 问题及其答案&#xff0c;涵盖基础知识、常见问题及面试技巧。适用于准备前端开发职位面试的候选人参考。 目录 前言HTML & CSS1. 对 WEB 标准以及 W3C 的理解与认识2. XHTML 和 HTML 有什么区别3.…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

Axure 下拉框联动

实现选省、选完省之后选对应省份下的市区...

深入解析光敏传感技术:嵌入式仿真平台如何重塑电子工程教学

一、光敏传感技术的物理本质与系统级实现挑战 光敏电阻作为经典的光电传感器件&#xff0c;其工作原理根植于半导体材料的光电导效应。当入射光子能量超过材料带隙宽度时&#xff0c;价带电子受激发跃迁至导带&#xff0c;形成电子-空穴对&#xff0c;导致材料电导率显著提升。…...

Linux中INADDR_ANY详解

在Linux网络编程中&#xff0c;INADDR_ANY 是一个特殊的IPv4地址常量&#xff08;定义在 <netinet/in.h> 头文件中&#xff09;&#xff0c;用于表示绑定到所有可用网络接口的地址。它是服务器程序中的常见用法&#xff0c;允许套接字监听所有本地IP地址上的连接请求。 关…...

简单聊下阿里云DNS劫持事件

阿里云域名被DNS劫持事件 事件总结 根据ICANN规则&#xff0c;域名注册商&#xff08;Verisign&#xff09;认定aliyuncs.com域名下的部分网站被用于非法活动&#xff08;如传播恶意软件&#xff09;&#xff1b;顶级域名DNS服务器将aliyuncs.com域名的DNS记录统一解析到shado…...

联邦学习带宽资源分配

带宽资源分配是指在网络中如何合理分配有限的带宽资源&#xff0c;以满足各个通信任务和用户的需求&#xff0c;尤其是在多用户共享带宽的情况下&#xff0c;如何确保各个设备或用户的通信需求得到高效且公平的满足。带宽是网络中的一个重要资源&#xff0c;通常指的是单位时间…...

【向量库】Weaviate 搜索与索引技术:从基础概念到性能优化

文章目录 零、概述一、搜索技术分类1. 向量搜索&#xff1a;捕捉语义的智能检索2. 关键字搜索&#xff1a;精确匹配的传统方案3. 混合搜索&#xff1a;语义与精确的双重保障 二、向量检索技术分类1. HNSW索引&#xff1a;大规模数据的高效引擎2. Flat索引&#xff1a;小规模数据…...