力扣刷题Days16(js)-67二进制求和

news2024/11/27 4:26:53

目录

1,题目

2,代码

2.1转换进制数

2.2模拟加法

3,学习与总结

Math.floor()

模拟加法思路回顾


重点复习巩固 模拟加法的思路和学习位运算;

今天没精力了,先休息


1,题目

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

2,代码

2.1转换进制数

  • `0b${a}`:这是一个模板字符串,用于构建字符串字面量。在这里,0b是一个前缀,指示随后的数字是二进制格式的。${a}是模板字符串中的插值表达式,它会被变量a的值替换。假设a的值是"1010",那么表达式`0b${a}`的结果将是字符串"0b1010"
  • BigInt(...)BigInt函数接受一个字符串或数字参数,并返回相应的大整数(BigInt)值。当给定的字符串以0b0o0x为前缀时,分别表示该字符串是二进制、八进制或十六进制数,BigInt函数会相应地解析这些字符串为大整数。

因此,当你执行BigInt(`0b${a}`)时,JavaScript首先计算模板字符串`0b${a}`,得到一个形如"0b1010"的字符串,表示二进制数。然后,BigInt函数将这个字符串解析为一个BigInt类型的大整数值。

这种方法允许你从二进制字符串直接创建一个BigInt值,而不需要先将字符串转换为十进制数。这在处理大型二进制数据时特别有用,因为它避免了数值的范围限制和精度问题。

toString(2)是一个非常有用的方法,用于将数字转换成其二进制字符串表示形式。这里的2.toString()方法的参数,指定了转换的基数(radix),在这种情况下是二进制(base-2)。基数可以是介于2到36之间的任何整数,允许你将数字转换为不同的数制表示,例如十进制、十六进制等。

/**
 * @param {string} a
 * @param {string} b
 * @return {string}
 */


var addBinary = function(a, b) {
    
    const num1 = BigInt(`0b${a}`);
    const num2 = BigInt(`0b${b}`);

    return (num1 + num2).toString(2);

};

2.2模拟加法

Math.floor()将一个指定的数值向下取整到最接近的整数。这意味着Math.floor()会返回小于或等于给定参数的最大整数。

/**
 * @param {string} a
 * @param {string} b
 * @return {string}
 */


var addBinary = function(a, b) {
    
    let ans = [];
    let n = Math.max(a.length,b.length);
    // 记录上一位的进位数值
    let carry = 0;
    for(let i = 0;i<n;i++){
        // 先反转这个代表二进制数字的字符串
        // 从而低下标对应低位,高下标对应高位。
        carry += i < a.length ? parseInt(a.charAt(a.length-1-i)) : 0;
        carry += i < b.length ? parseInt(b.charAt(b.length-1-i)) : 0;
        ans.push(carry % 2);
        
        carry = Math.floor(carry/2);
    }
    if(carry > 0){
        ans.push(1);
    }
    // 将数组进行翻转 并将数组转换为字符串
    return ans.reverse().join('');

};

3,学习与总结

Math.floor()

console.log(Math.floor(5.95)); // 输出: 5
console.log(Math.floor(5.05)); // 输出: 5
console.log(Math.floor(5));    // 输出: 5
console.log(Math.floor(-5.05)); // 输出: -6

模拟加法思路回顾

思考点:让各个位置对齐,可以先反转这个代表二进制数字的字符串,则 数组底下标对应低位数,数组高下标对应高位数;

核心代码:

carry += i < a.length ? parseInt(a.charAt(a.length-1-i)) : 0;
carry += i < b.length ? parseInt(b.charAt(b.length-1-i)) : 0;
ans.push(carry % 2);
        
carry = Math.floor(carry/2);

记当前位置对其的两个位为 ai和 bi,

每一位的答案为 (carry+ai+bi) mod 2,下一位的进位为 ⌊(carry+ai+bi)/2 ⌋。

作者:力扣官方题解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1511420.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2m高分辨率土地利用分类矢量数据/植被类型分布数据

土地利用数据是在根据影像光谱特征&#xff0c;结合野外实测资料&#xff0c;同时参照有关地理图件&#xff0c;对地物的几何形状&#xff0c;颜色特征、纹理特征和空间分布情况进行分析&#xff0c;建立统一解译标志的基础之上&#xff0c;依据多源卫星遥感信息&#xff0c;结…

【Echarts】曲线图上方显示数字以及自定义值,标题和副标题居中,鼠标上显示信息以及自定义信息

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是《前端》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌握…

前端精准测试调用链路分析

精准测试在评估需求的测试范围时&#xff0c;需要评估一下代码的影响范围&#xff0c;这个范围有两部分&#xff1a;一是需求直接修改的代码&#xff1b;二是修改代码影响到的功能模块。代码影响到的功能一般是通过调用链路分析来实现的&#xff0c;java和kotlin代码可以由java…

小白必看,靠这几步写一份简单的产品说明书!

我们都知道&#xff0c;无论是新产品发布&#xff0c;还是老产品的推广&#xff0c;产品说明书都扮演着至关重要的角色。产品说明书可以帮助用户正确、高效地使用产品&#xff0c;也是传递企业发展理念、展示企业形象的有效途径。但作为一个小白&#xff0c;怎样才能写一份简单…

JSONObject在Android Main方法中无法实例化问题

目录 前言一、Main(非安卓环境)方法下运行二、安卓坏境下运行三、why? 前言 原生的json,即org.json.JSONObject; 在Android Studio中的Main方法里运行报错&#xff0c;但在安卓程序运行过程正常 一、Main(非安卓环境)方法下运行 static void test() {try {// 创建一个 JSON …

动态类型是什么?——跟老吕学Python编程

动态类型是什么&#xff1f;——跟老吕学Python编程 前言动态编程语言动态编程语言特点&#xff1a;动态编程语言的优点&#xff1a;动态编程语言的缺点&#xff1a; 静态编程语言静态编程语言特点&#xff1a;静态编程语言的优点&#xff1a;静态编程语言的缺点&#xff1a; 总…

【Vue3】什么是路由?Vue中的路由基本切换~

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

Linux操作系统-07-Linux安装应用

一、使用rpm安装应用&#xff08;不推荐&#xff09; 先下载到本地&#xff0c;以.rpm文件名结尾&#xff0c;下载完成后&#xff0c;再安装 rpm -qa | grep mysql #查询当前系统是否有下载过mysql包 先上传mysql的rpm安装包到linux的opt目录 安装 rpm -ivh …

云游戏发行是什么?云游戏发行的演进历程

云游戏发行是一系列基于云游戏技术的游戏发行策略或行为&#xff0c;融合云试玩、云微端、可玩广告、跨端移植等技术&#xff0c;从而在传统游戏发行生态的基础上实现更为卓越的发行效果。 云游戏发行出现的原因 近年来&#xff0c;游戏市场出现负增长。其原因一方面在于游戏版…

删除数据表

oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 删除数据表属于数据库对象的操作 drop table 表名称; 删除 emp30 表 SQL> drop table emp30;表已删除。 上面这个语句运行后&#xff0c;就会把数据表 emp30 删除 在…

AV1:编码块划分

​AV1是AOM于2018年发布的一代视频编码标准&#xff0c;相比于VP9其编码效率提升30%&#xff0c;相对于H.26X系列标准&#xff0c;AV1完全免去专利费可以自由使用。 AV1和其他视频编码标准类似&#xff0c;也采用基于块的编码架构。当编码器读进一帧图像&#xff0c;首先将其划…

Vue 3中的provide和inject:跨组件通信的新方式

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【linux】冯诺依曼体系与操作系统的理解

本篇文章是进程的预备知识&#xff0c;但也不仅仅是进程的预备知识&#xff0c; 也可以更好地帮助我们理解整个计算机体系。 目录 冯诺依曼体系结构&#xff1a;进一步理解操作系统&#xff1a; 冯诺依曼体系结构&#xff1a; 关于这张图先进行一下必要的解释&#xff1a; 输…

【清晰易懂】@Mapper注解和BaseMapper爱恨情仇

此问题的提出在于自己没有弄明白一个问题&#xff0c;就是Mapper注解有时候可以不加&#xff0c;有时候又需要加。 先说结论&#xff1a;Mapper注解和BaseMapper类在项目中起着相同的作用&#xff0c;都是为了实现数据库基本简单的CRUD&#xff0c;省去在xml文件中再去写&#…

java八股文复习----java集合,CAS---2024/03/12

1.java常见的集合类 2.List&#xff0c;Set,Map的区别 3.上述三个集合有哪些常用的方法 4.List,Set,Map哪几个是线程安全的&#xff1f; 5.ArrayList和LinkedList的区别 6.ArrayList和Vector的区别 7.ArrayList的扩容机制 8.HashMap集合 8.1数据结构 8.2哈希冲突的解决办法有哪…

Conmi遇到的坑——禅道的PCDN

好家伙&#xff0c;悄悄在后台吃了七十多G流量&#xff0c;我把你当兄弟宣传&#xff0c;你把我当PCDN吸。 还纳闷今天创建个VUE项目怎么提示D盘没空间&#xff0c;明明留了几十G&#xff0c;好家伙&#xff0c;一下子全吸干了。 删了两个&#xff0c;还有一个&#xff08;已…

吴恩达深度学习笔记:神经网络的编程基础2.5-2.8

目录 第一门课&#xff1a;神经网络和深度学习 (Neural Networks and Deep Learning)第二周&#xff1a;神经网络的编程基础 (Basics of Neural Network programming)2.5 导数&#xff08;Derivatives&#xff09; 第一门课&#xff1a;神经网络和深度学习 (Neural Networks an…

PNG图片合成,带手机外观设置,可自定义金额等

PNG图片合成&#xff0c;带手机外观设置&#xff0c;可自定义金额等 软件界面成品显示免责声明 软件界面 成品显示 免责声明 若因使用代码与官方造成不必要的纠纷&#xff0c;本人盖不负责&#xff0c;存粹技术爱好&#xff0c;若侵犯贵公司的权益&#xff0c;请告知&#xff…

美团2025春招第一次笔试题

第四题 题目描述 塔子哥拿到了一个大小为的数组&#xff0c;她希望删除一个区间后&#xff0c;使得剩余所有元素的乘积未尾至少有k个0。塔子哥想知道&#xff0c;一共有多少种不同的删除方案? 输入描述 第一行输入两个正整数 n,k 第二行输入n个正整数 a_i&#xff0c;代表…

教你用两种方式遍历循环python中的字典

开发中经常会用到对于字典、列表等数据的循环遍历&#xff0c;但是python中对于字典的遍历对于很多初学者来讲非常陌生&#xff0c;今天就来讲一下python中字典的循环遍历的两种方式。 注意&#xff1a; python2和python3中&#xff0c;下面两种方法都是通用的。 1. 只对键的…