题目描述 给你两个二进制字符串,返回它们的和(用二进制表示)。 输入为 非空 字符串且只包含数字 1 和 0。 示例 1: 输入 : a = "11" , b = "1" 输出 : "100" 示例 2: 输入 : a = "1010" , b = "10
题目描述
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1 和 0。
示例 1:
输入: a = "11", b = "1"输出: "100"
示例 2:
输入: a = "1010", b = "1011"输出: "10101"
提示:
- 每个字符串仅由字符 ‘0’ 或 ‘1’ 组成。
- 1 <= a.length, b.length <= 104
- 字符串如果不是 “0” ,就都不含前导零。
实现思路
这个使用最直接的方法来解决,直接对应位进行相加操作,需要对进位数进行判断,然后给出不同的操作。最后需要注意,如果还有进位,就在结果的前面加个1。
代码实现
/*** @param {string} a
* @param {string} b
* @return {string}
*/
var addBinary = function(a, b) {
// 首先将两个树的位数补齐
while(a.length > b.length) b = "0" + b
while(a.length < b.length) a = "0" + a
let res = new Array(a.length)
let sum = 0
let temp = 0 // 进位
for(let i = a.length - 1; i >= 0; i --){
sum = Number(a[i]) + Number(b[i]) + temp
if(sum >= 2){
res[i] = sum - 2
temp = 1
}else{
res[i] = sum
temp = 0
}
}
if(temp) res.unshift(1)
return res.join("")
};
提交结果