zoukankan      html  css  js  c++  java
  • 二进制求和

    二进制求和

    给你两个二进制字符串,返回它们的和(用二进制表示)。
    输入为 非空 字符串且只包含数字10

    示例

    输入: a = "11", b = "1"
    输出: "100"
    
    输入: a = "1010", b = "1011"
    输出: "10101"
    

    提示

    • 每个字符串仅由字符'0''1'组成。
    • 1 <= a.length, b.length <= 10^4
    • 字符串如果不是"0",就都不含前导零。

    题解

    /**
     * @param {string} a
     * @param {string} b
     * @return {string}
     */
    var addBinary = function(a, b) {
        var longer = "";
        var shorter = "";
        if(a.length > b.length){
            longer = a;
            shorter = b.padStart(a.length,0);
        }else{
            longer = a.padStart(b.length,0);
            shorter = b;
        }
        var target = "";
        var addition = 0;
        for(let i=longer.length-1;i>=0;--i){
            let unitNum = ~~(longer[i]) + ~~(shorter[i]) + addition;
            addition = 0;
            if(unitNum >= 2) {
                addition = 1;
                target = `${unitNum-2}${target}`;
            }else{
                target = `${unitNum}${target}`;
            }
        }
        if(addition) target = `1${target}`;
        return target;
    };
    

    思路

    首先需要将两个字符串的长度进行统一,判断两个字符串长度的长度,然后选出短的字符串在字符串前填充0,也就是使用String.prototype.padStart()方法进行填充,然后定义目标字符串以及进位标记变量,然后从后开始往前遍历字符串,将字符串中的字符转换成数字类型然后相加并与进位变量相加,其中~~就是利用位运算将字符转换成数字,相加完成后将进位标志置为0,然后判断字符是否大于2,如果大于等于2则将相加的字符减掉2并将进位标记记为1,若小于2则直接拼接字符串,然后不断循环完成目标字符的拼接,若最后依然有进位标志,则直接拼接1到目标字符串前,然后返回目标字符串即可。

    每日一题

    https://github.com/WindrunnerMax/EveryDay
    

    题源

    https://leetcode-cn.com/problems/add-binary
    
  • 相关阅读:
    互质与欧拉函数学习笔记
    Luogu P4588 [TJOI2018]数学计算 题解
    Luogu P1072 Hankson 的趣味题 题解
    Luogu [POI2002][HAOI2007]反素数 题解
    Luogu P2986 [USACO10MAR]伟大的奶牛聚集Great Cow Gat… 题解
    JavaScript 实现简易版贪吃蛇(Day_13)
    IDEA 配置 Tomcat(详细)(Day_12)
    常用数据库连接池配置及使用(Day_11)
    大对象数据LOB的应用(Day_10)
    IDEA中配置maven 全解析教程(Day_08)
  • 原文地址:https://www.cnblogs.com/WindrunnerMax/p/13185315.html
Copyright © 2011-2022 走看看