前言
一个小伙伴说希望成立一个刷题小组,本就着富强、民主、文明、和谐,倡导自由、平等、公正、法治,倡导爱国、敬业、诚信、友善,积极培育社会主义核心价值观,我答应他了。
因为也没有刷过题,比较菜。然后就看了下别人家的孩子怎么刷题的,这里附上链接。
朝花夕拾 - 2019 总结(附 283 道 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('');
};
差不多就是要先理解这个思路