又是一年一度的1024,那就记录一篇算法博客吧~ 【二进制加法探秘】
前言: 又是一年一度的1024,那就记录一篇算法博客吧~ 内容如下~
1 题目介绍
给定两个二进制字符串 a 和 b,需要返回它们的和,结果以二进制字符串形式给出。
示例 1:
输入: a = “11”, b = “1” 输出: “100”
示例 2:
输入: a = “1010”, b = “1011” 输出: “10101”
提示:
1 <= a.length, b.length <= 104a和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.…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
