当前位置: 首页 > 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.…...

Dism++终极指南:5个核心功能让Windows系统优化变得简单快速

Dism终极指南&#xff1a;5个核心功能让Windows系统优化变得简单快速 【免费下载链接】Dism-Multi-language Dism Multi-language Support & BUG Report 项目地址: https://gitcode.com/gh_mirrors/di/Dism-Multi-language Dism是一款基于微软DISM技术开发的强大Win…...

从泡泡实验室到阿木社区:PX4开发者如何在国内技术圈子里快速成长?

从泡泡实验室到阿木社区&#xff1a;PX4开发者如何在国内技术圈子里快速成长&#xff1f; 在无人机开源飞控领域&#xff0c;PX4和Pixhawk已经成为开发者绕不开的技术栈。但相比国外活跃的开发者社区&#xff0c;国内的技术生态往往让新手感到无从下手——百度贴吧的讨论碎片化…...

3分钟搞定Axure RP中文界面:全版本汉化终极指南

3分钟搞定Axure RP中文界面&#xff1a;全版本汉化终极指南 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文…...

卸载软件后右键菜单残留?用PowerShell精准清理注册表(附一键备份脚本)

彻底告别右键菜单残留&#xff1a;PowerShell注册表清理实战指南 刚卸载完某款压缩软件&#xff0c;却发现右键菜单里依然顽固地留着它的选项——这种经历恐怕不少Windows用户都遇到过。上周帮同事处理电脑时&#xff0c;就遇到了一个典型案例&#xff1a;卸载"可牛压缩&q…...

告别手动建模!用ArcGIS+SWMM+慧天平台,5步搞定城市内涝模拟(附实战数据)

城市内涝模拟实战&#xff1a;ArcGISSWMM慧天平台高效协同工作流 暴雨过后街道成河、地下车库变泳池的场景&#xff0c;已成为许多城市规划者和工程师的噩梦。传统的内涝模拟方法需要手动处理海量管网数据&#xff0c;不仅耗时费力&#xff0c;还容易在数据转换过程中丢失关键信…...

人工智能-现代方法(一)

2026.05.12 这几天开始看《人工智能-现代方法》&#xff0c;做一些知识记录。 1、学习的概念&#xff1a;归纳和演绎。&#xff08;19章&#xff09; 演绎靠逻辑推理&#xff0c;归纳靠经验总结。所以在前提正确的情况下&#xff0c;演绎的结论必然正确。归纳的结论则有可能出现…...

不止于透传:用VirtIO-GPU为你的KVM虚拟机开启3D加速(附XML配置详解)

VirtIO-GPU虚拟化加速实战&#xff1a;从原理到配置的深度解析 在虚拟化技术日益成熟的今天&#xff0c;GPU加速已成为开发测试、图形工作站和云桌面等场景的刚需。传统GPU透传方案虽然性能接近原生&#xff0c;但受限于硬件数量且缺乏灵活性。VirtIO-GPU结合virglrenderer的软…...

告别MATLAB命令行里的‘天书’:手把手教你用symdisp优雅展示LaTeX公式

MATLAB符号计算可视化革命&#xff1a;用symdisp实现LaTeX级公式渲染 在科研和工程计算领域&#xff0c;MATLAB的符号计算工具箱一直是数学推导的利器&#xff0c;但长期以来&#xff0c;命令行输出的公式展示方式让许多研究者头疼——密密麻麻的文本表达式不仅难以直观理解&am…...

【DeepSeek安全防护权威指南】:20年攻防专家亲授Prompt注入3大高危场景与7层防御体系

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeek Prompt注入防护的演进与现状 随着 DeepSeek 系列大模型在企业级场景中的深度部署&#xff0c;Prompt 注入攻击已从理论威胁演变为高频真实风险。早期防护策略依赖于简单的关键词过滤和长度截断…...

终极KMS激活指南:如何一键永久激活Windows和Office

终极KMS激活指南&#xff1a;如何一键永久激活Windows和Office 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统弹出激活警告而烦恼吗&#xff1f;或者Office软件突然变成只读模…...