又是一年一度的1024,那就记录一篇算法博客吧~ 【二进制加法探秘】
前言: 又是一年一度的1024,那就记录一篇算法博客吧~ 内容如下~
1 题目介绍
给定两个二进制字符串 a
和 b
,需要返回它们的和,结果以二进制字符串形式给出。
示例 1:
输入: a = “11”, b = “1” 输出: “100”
示例 2:
输入: a = “1010”, b = “1011” 输出: “10101”
提示:
1 <= a.length, b.length <= 104
a
和b
仅包含字符'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 的数组操作方法,例如 split
、reverse
、join
等。
而且,刷这种题不仅有助于提升逻辑思维,还帮助我发现了许多细节上的优化技巧,真正达到了“温故而知新”的效果。在平时的开发工作中,遇到复杂逻辑时,这些基础算法和思维方式也能够给我们提供很多帮助。
感谢阅读!
- 博主的前端个人网站:zhangqiang.hk.cn
- 欢迎加入我的前端学习交流群:706947563,共同学习进步!
彩蛋:
今天收到女朋友的1024礼物,一件贴心小棉袄(羽绒服),开心_
相关文章:
又是一年一度的1024,那就记录一篇算法博客吧~ 【二进制加法探秘】
前言: 又是一年一度的1024,那就记录一篇算法博客吧~ 内容如下~ 1 题目介绍 给定两个二进制字符串 a 和 b,需要返回它们的和,结果以二进制字符串形式给出。 示例 1: 输入: a “11”, b “1” 输出: “100” 示例 2…...
LeetCode--买卖股票的最佳时机含冷冻期--动态规划
一、题目解析 二、算法原理 我们可以使用dp[i]来表示第i天买卖股票所获得的最大利润。由题可得我们只能持有一支股票,并且在卖出后有冷冻期的限制,因此我们会有三种不同的状态: 我们目前持有一支股票,对应的「累计最大收益」记为…...
装了Ubuntu和Windows双系统,如何设置默认启动Windows
可以将默认启动系统设置为Windows,以下是步骤: 1. 修改GRUB配置文件: • 启动到Ubuntu,打开终端。 • 编辑GRUB配置文件: sudo nano /etc/default/grub • 找到这一行: GRUB_DEFAULT0 将0改为对应Wi…...
WPF+MVVM案例实战-设备状态LED灯变化实现
文章目录 1、项目创建2、UI界面布局1. MainWindow.xaml2、颜色转换器实现2.MainViewModel.cs 代码实现 3、运行效果4.源代码下载 1、项目创建 打开 VS2022 ,新建项目 Wpf_Examples,创建各层级文件夹,安装 CommunityToolkit.Mvvm 和 Microsof…...
MySQL--基本介绍
一.数据库前言 1.数据库的相关介绍 关系数据库管理系统(Relational Database Management System:RDBMS)是指包括相互联系的逻辑组织和存取这些数据的一套程序 (数据库管理系统软件)。关系数据库管理系统就是管理关系数据库,并将数…...
PAT甲级1008 Elevator
题目地址: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 时间(时分秒) , user_id string comment 用户 ID, word string comment 搜索词 , u…...
git的安装以及入门使用
文章目录 git的安装以及入门使用什么是git?git安装git官网 git初始化配置使用方式初始化配置: git的安装以及入门使用 什么是git? Git 是一个免费开源的分布式版本控制系统,使用特殊的仓库数据库记录文件变化。它记录每个文件的…...
【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 错误码通常出现在什么场景?
服务器过载场景 高流量访问:当网站遇到突发的高流量情况,如热门产品促销活动、新闻热点事件导致网站访问量激增时,服务器可能会因承受过多请求而无法及时响应。例如,电商平台在 “双十一” 等购物节期间,大量用户同时…...
面试经典算法题69-两数之和
面试经典算法题69-两数之和 公众号:阿Q技术站 LeetCode.1 问题描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。…...
在 Spring 框架中,循环依赖是指两个或多个 Bean 之间相互依赖
在 Spring 框架中,循环依赖是指两个或多个 Bean 之间相互依赖,形成一个闭环。例如,Bean A 依赖于 Bean B,而 Bean B 又依赖于 Bean A。这种情况如果不加以处理,会导致 Bean 无法正确实例化,从而引发应用程序…...
一文带你入门Flink CDC
1 CDC简介 1.1 什么是CDC CDC是Change Data Capture(变更数据获取)的简称。核心思想是,监测并捕获数据库的变动(包括数据或数据表的插入、更新以及删除等),将这些变更按发生的顺序完整记录下来,写入到消息中间件中以供其他服务进行订阅及消费。 1.2 CDC的种类 CDC主要…...
修复jenkins SSH 免密登录发布服务器
SSH 免密登录配置和修复步骤: 1. 配置 SSH 免密登录 在本地主机执行以下命令,将公钥复制到目标服务器: ssh-copy-id bjpark172.27.xx.xx输入密码完成公钥传输。 2. 修复 SSH 免密登录失败的权限问题 如果免密登录失败,用root…...
049_python基于Python的热门微博数据可视化分析
目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍:CodeMentor毕业设计领航者、全网关注者30W群落,InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者,博客领航之星、开发者头条/腾讯云/AW…...
中国信通院联合中国电促会开展电力行业企业开源典型实践案例征集
自2021年被首次写入国家“十四五”规划以来,开源技术发展凭借其平等、开放、协作、共享的优秀创作模式,正持续成为推动数字技术创新、优化软件生产模式、赋能传统行业转型升级、助力企业降本增效的重要引擎。电力是国民经济的重要基础性产业,…...
LOAM 20.04 ros1安装
LOAM 安装 LOAM源码 安装参考 上述安装参考在 报错1、 C标准改为17 解决方案 数据集 试车实验...
Pyqt5设计打开电脑摄像头+可选择哪个摄像头(如有多个)
目录 专栏导读库的安装代码介绍完整代码总结 专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注 👍 该系列文…...
mysqldump 批量导出数据库表
先查询需要导出的数据表,使用语句 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 问题及其答案,涵盖基础知识、常见问题及面试技巧。适用于准备前端开发职位面试的候选人参考。 目录 前言HTML & CSS1. 对 WEB 标准以及 W3C 的理解与认识2. XHTML 和 HTML 有什么区别3.…...
Linux 权限的理解
内容摘要 本文内容包括shell的运行原理,包括外壳程序的原理、理解、和意义,以及从两个方面对于权限的理解(人和事物的属性)、修改文件的权限,包括修改文件的拥有者、修改文件拥有者所在的组的用户以及修改文件的三类用…...
『完整代码』按钮开关UI界面
创建按钮Button 作为开关坐骑UI界面的按钮 创建Image 作为坐骑UI界面 在父类脚本添加其中函数即可 绑定脚本在父类窗口对象 在按钮上响应事件 隐藏UI界面 运行项目 - 实现点击按钮开关UI界面 再次点击按钮 - 关闭UI界面 end...
梦结束的地方 -- 爬楼梯
梦结束的地方 — 爬楼梯 力扣70 : 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例如下: 何解? 最后要爬上楼顶,无非两种上法,最后一…...
身份证识别JAVA+OPENCV+OCR
一、相关的地址 https://github.com/tesseract-ocr/tessdata Releases - OpenCV opencv要装好,我装的是4.5.3的,最新版的没试过。 tessdata就下载了需要用的。好像还有best和fast的版本,我试了一下报错,不知道是不是版本不支持…...
独立开发者如何利用AI实现高收入
引言 在探索独立开发领域时,AI技术的出现为开发者打开了新世界的大门。本文将分享如何利用AI技术提高开发效率,实现更高的收入。 AI在编程中的应用 AI技术的快速发展为独立开发者带来了前所未有的机遇。通过使用AI,我们可以: …...
Go第三方框架--gorm框架(一)
前言 orm模型简介 orm模型全称是Object-Relational Mapping,即对象关系映射。其实就是在原生sql基础之上进行更高程度的封装。方便程序员采用面向对象的方式来操作数据库,将表映射成对象。 这种映射带来几个好处: 代码简洁:不用…...
ONLYOFFICE文档8.2:开启无缝PDF协作
ONLYOFFICE 开源办公套件的最新版本新增约30个新功能,并修复了超过500处故障。 什么是 ONLYOFFICE 文档 ONLYOFFICE 文档是一套功能强大的文档编辑器,支持编辑处理文档、表格、幻灯片、可填写的表单和PDF。可多人在线协作,支持插件和 AI 集…...
内网python smtplib用ssh隧道通过跳板机发邮件
Python 自带 smtplib 包可以发邮件,示例见 [1,2],在邮箱设置启用 IMAP/POP3 就能用。有些邮箱需要设置授权码,如新浪、163 邮箱,然后以授权码作为 smtplib 登录服务器的密码。邮箱端配置参考 [3,4]。 现在情况是: 邮…...
基于C#开发游戏辅助工具的Windows底层相关方法详解
开发游戏辅助工具通常需要深入了解Windows操作系统的底层机制,以及如何与游戏进程进行有效交互。本文将基于C#语言,从Windows底层方法的角度来详细讲解开发游戏辅助工具的相关技术和概念。 一、游戏辅助工具的基本概述 游戏辅助工具,通常被称…...
SSRF+Redis进行内网渗透
SSRFRedis进行内网渗透 一 环境搭建 准备一台服务器,开启了lampp以及redis,redis只允许内网访问 把上面这个注释放开后,redis就只能内网访问 启动redis 使用kali进行端口扫描,扫不到6379端口 kali连接不上redis ssrf漏洞代码 &…...
厦门编程培训机构/seo在线诊断工具
如何在Linux环境中加密shell脚本?shell脚本包含密码,不希望其他具有执行权限的人查看shell脚本并获取密码。可以安装使用shc工具,普通用户无法读取shc创建的加密Shell脚本。SHC是指:Shell脚本编译器(Shell Script Compiler)。 环…...
wordpress阅读付费主题/为企业策划一次网络营销活动
git init 在git命令行中依次输入 touch readme.txt并回车, git add . 点代表所有, git commit -m "init first"并回车,三条命令,这三条命令作用是创建一个readme.txt文件并提交到版本库中. git remote add origin https://github.c…...
wordpress导出图片/南京网站设计优化公司
#Html今日学习内容这是第一次#x{width: 100px;height: 400px;}#f{width: 100px;height:50px;}.bordered {border-style:solid;color:red;}.yoxixi {color:red;text-decoration:underline;font-weight:bold;}锚点标题一我很快乐,我很喜欢,很愉悦。标题二我…...
贵阳网站建设哪家/哪个合肥seo好
Pycharm 及 python 安装详细教程 首先我们来安装 python 1 、 首 先 进 入 网 站 下 载 : 点 击 打 开 链 接 ( 或 自 己 输 入 网 址 https://www.python.org/downloads/ ) ,进入之后如下图,选择图中红色 圈中区域进行…...
网站页脚模板/个人网站推广方法
一个640x640的YUV420P图像占用的字节数为:640 x 640 x 3 / 2 2304000 字节。 YUV420P是一种视频编码格式,其中图像是分为三个通道:Y(亮度)、U(蓝色差)和V(红色差)。每个像素由一个Y值和两个UV值组成。因此,一个像素占用1个字节的…...
网站建设中的主要功能/三只松鼠有趣的软文
在.onInit里面添加如下代码: # 禁止多个安装程序实例 Begin System::Call kernel32::CreateMutexA(i 0, i 0, t "mysetup") i .r1 ?e #注意最后的?e Pop $R0 #保存LastError返回值 ;System::Call kernel32::CloseHandle(i r1) i.s #此处不能关闭…...