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

目录

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 ⌋。

作者:力扣官方题解

相关推荐

  1. 每日OJ_字符串③_67. 二进制求和

    2024-03-13 01:04:04       43 阅读
  2. 位运算-67. 二进制求和

    2024-03-13 01:04:04       35 阅读
  3. 67 二进制求和 C语言

    2024-03-13 01:04:04       33 阅读
  4. 【LeetCode记录】简单篇-67-二进制求和

    2024-03-13 01:04:04       29 阅读
  5. 求职 day10 ---栈与队列part01

    2024-03-13 01:04:04       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-13 01:04:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-13 01:04:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-13 01:04:04       82 阅读
  4. Python语言-面向对象

    2024-03-13 01:04:04       91 阅读

热门阅读

  1. linux设置开机启动慎用nohup

    2024-03-13 01:04:04       43 阅读
  2. PyTorch学习笔记(三)

    2024-03-13 01:04:04       39 阅读
  3. 程序员如何选择职业赛道?

    2024-03-13 01:04:04       53 阅读
  4. Armadillo:矩阵类、向量类、Cube类和泛型类

    2024-03-13 01:04:04       33 阅读
  5. Linux的目录结构(介绍主要的)

    2024-03-13 01:04:04       39 阅读
  6. Android主界面多Tab实现方式

    2024-03-13 01:04:04       44 阅读
  7. android so载入过程

    2024-03-13 01:04:04       39 阅读
  8. Vue3:ref和reactive实现响应式数据

    2024-03-13 01:04:04       45 阅读
  9. LeetCode--代码详解 146.LRU缓存

    2024-03-13 01:04:04       49 阅读
  10. Lwip之TCP服务端示例记录(1对1)

    2024-03-13 01:04:04       37 阅读
  11. swagger-ui页面设置接口请求头head参数

    2024-03-13 01:04:04       44 阅读
  12. .NET Core 日志记录功能详解

    2024-03-13 01:04:04       42 阅读