LeetCode刷题日记(简单)- 67. 二进制求和

89 阅读1分钟

前言

一个小伙伴说希望成立一个刷题小组,本就着富强、民主、文明、和谐,倡导自由、平等、公正、法治,倡导爱国、敬业、诚信、友善,积极培育社会主义核心价值观,我答应他了。

因为也没有刷过题,比较菜。然后就看了下别人家的孩子怎么刷题的,这里附上链接。

-力扣传送门-

朝花夕拾 - 2019 总结(附 283 道 LeetCode 题解)

我是如何刷 LeetCode 的?

题目描述:

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

示例 1:

输入:a = "11", b = "1" 输出:"100" 示例 2:

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

提示:

1 <= a.length, b.length <= 104 a 和 b 仅由字符 '0' 或 '1' 组成 字符串如果不是 "0" ,就不含前导零

解题

    /**
 * @param {string} a
 * @param {string} b
 * @return {string}
 * 二进制和,两个二进制字符串
 * 因为是js,所以我们先学习下js的二级制加法,或者就是按照二进制规律拼接了。
 *
 */
/**
 * @param {string} a
 * @param {string} b
 * @return {string}
 */
var addBinary = function(a, b) {
    //拼接数
    let ans = "";
    //保留上一次的是否有进位
    let ca = 0;
    for(let i = a.length - 1, j = b.length - 1;i >= 0 || j >= 0; i--, j--) {
        let sum = ca;
        //加a的数
        sum += i >= 0 ? parseInt(a[i]) : 0;
        //加B的数
        sum += j >= 0 ? parseInt(b[j]) : 0;
        //拼接当前位的字符串值
        ans += sum % 2;
        //判断当前是否需要进位
        ca = Math.floor(sum / 2);
    }
    ans += ca == 1 ? ca : "";
    //split 按照""切割成数字组  反转数组  拼接成字符串
    return ans.split('').reverse().join('');
};

1680847615737.jpg

差不多就是要先理解这个思路