当前位置: 首页 > news >正文

二进制求和(js实现,LeetCode:67)

这道题我的解决思路是先将a和b的长度保持一致以方便后续按位加减

let lena = a.length
let lenb = b.length
if (lena !== lenb) {
    if (lena > lenb) {
        for (let i = 0; i <lena-lenb; i++) {
            b = '0' + b
        }
    } else {
        for (let i = 0; i < lenb-lena; i++) {
            a = '0' + a
        }
    }
}

 下一步直接进行按位加减,做这一步时无需考虑是否需要进位

let c = ''
for (let i = 0; i < a.length; i++) {
    c = c + Number(Number(a[i]) + Number(b[i]))
}

最后通过将c转换为数组来做二进制进位

arr = c.split('')
    for (let j = arr.length - 1; j > 0; j--) {
        if (Number(arr[j]) >= 2) {
            arr[j] = Number(arr[j]) - 2
            arr[j - 1] = Number(arr[j - 1]) + 1
        }
    }

    if (Number(arr[0]) >1) {
        arr[0] = Number(arr[0]) - 2
        arr.unshift(1)
    }

最后将arr拼接成字符串之后返回

return arr.join('')

下面附上完整代码

/**
 * @param {string} a
 * @param {string} b
 * @return {string}
 */
var addBinary = function (a, b) {

    let lena = a.length
    let lenb = b.length
    let c = ''
    let arr = []
    if (lena !== lenb) {
        if (lena > lenb) {
            for (let i = 0; i <lena-lenb; i++) {
                b = '0' + b
            }
        } else {
            for (let i = 0; i < lenb-lena; i++) {
                a = '0' + a
            }
        }
    }

    for (let i = 0; i < a.length; i++) {
        c = c + Number(Number(a[i]) + Number(b[i]))
    }
    arr = c.split('')
    for (let j = arr.length - 1; j > 0; j--) {
        if (Number(arr[j]) >= 2) {
            arr[j] = Number(arr[j]) - 2
            arr[j - 1] = Number(arr[j - 1]) + 1
        }
    }

    if (Number(arr[0]) >1) {
        arr[0] = Number(arr[0]) - 2
        arr.unshift(1)
    }
    return arr.join('')
};

 

http://www.dtcms.com/a/67382.html

相关文章:

  • 如何在宝塔mysql修改掉3306端口
  • 数据库系统概念全面解析
  • 【从零开始学习计算机科学】数据库系统(五)DBMS查询处理
  • 高德爬取瓦片和vue2使用
  • 【ubuntu】——wsl中使用windows中的adb
  • 深度学习项目--基于DenseNet网络的“乳腺癌图像识别”,准确率90%+,pytorch复现
  • Spring Boot 3.3.4 升级导致 Logback 之前回滚策略配置不兼容问题解决
  • Spring Boot(十六):使用 Jenkins 部署 Spring Boot
  • 51单片机的keil c51软件安装教程
  • 鸿蒙开发-一多开发之媒体查询功能
  • [论文阅读]Demystifying Prompts in Language Models via Perplexity Estimation
  • Go语言 vs Java语言:核心差异与适用场景解析
  • MySQL 里的“锁”:保护数据的门卫
  • harbor v2.12.2 使用https公网访问
  • Linux中grep、sed和awk常见用法总结
  • OpenCV之颜色空间转换
  • 基于Vue3的流程图绘制库
  • (全)2024下半年真题 系统架构设计师 综合知识 答案解析01
  • 【软考网工-实践篇】NAT网络地址转换协议
  • 计算机三级网络技术知识汇总【9】
  • 开源工具利器:Mermaid助力知识图谱可视化与分享
  • 获取golang变量的类型
  • Figma的汉化
  • 【音视频开发】第二章 FFmpeg 开发环境
  • Unity制作的微信小游戏有关于多个游戏道具是否要对应多个激励视频广告
  • 银行卡归属地-BIN号与发卡行识别的实现逻辑
  • Leetcode7-整数反转
  • 使用AI一步一步实现若依前端(14)
  • git无法提交解决方案--! [rejected] master -> master (non-fast-forward)
  • 【亲测有用】数据集成平台能力演示(支持国产数据库DaMeng与KingBase)