leetcode记录:难度简单:58.返回字符串最后一个单词的长度

题目出处:https://leetcode.com/problems/add-binary/

题目描述:

给定两个二进制字符串,返回它们的总和(也是二进制字符串)。

输入字符串都是非空的,只包含字符1或0。

Example 1:

Input: a = "11", b = "1"
Output: "100"

Example 2:

Input: a = "1010", b = "1011"
Output: "10101"

代码:

const addBinary = (a, b) => {
        let res = ''; //结果,或者每次计算的余数,1或者0
        let letleftover = 0;//是否进位
        let i = a.length - 1; //第一个字符串长度
        let j = b.length - 1; //第一个字符串长度
        while (i >= 0 || j >= 0) {
            
            let sum = leftover;
            
            //把第一个2进制字符串的最后一位计算。记入sum。然后把数组i的下标定位到倒数第二位
            if (i >= 0) { sum += parseInt(a[i--]); } 
            
            //把第二个2进制字符串的最后一位计算。与sum合计。然后把数组j的下标定位到倒数第二位
            if (j >= 0) { sum += parseInt(b[j--]); }
            
            //sum是否进位,若进位,leftover = 1,res = 0,若不进位,leftover = 0,res =1
            res = (sum % 2) + res;
            leftover = sum / 2 | 0;
        }
        
        //根据进位的实际情况讲结果进行拼接
        if (leftover > 0) { res = leftover + res; }
        return res;
    };

思路:

 

我自己是用parseInt,和toString来进行操作的,实际结果就是当给的字符串数字大了之后,转化成2进制的精度可能不够导致无法通过submission

把2进制的计算过程复现了一遍,做起来还是很复杂,以上是别人的思路解法,我写个注释。

他的思路就是把人怎么算2进制的方法,复制给计算机。从两个2进制的数字的尾部开始进行计算,leftover是进位,res是每一次计算后的结果,每一次的res以字符串的形式相连接就是结果

笔记:

1.parseInt(xxx,radix),radix表示要解析的数字的基数。返回的结果是一个数字类型。

2.xxx.toString(2),得到的结果是2进制的字符串类型

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值