leetcode -- 67 -- 二进制求和

给你两个二进制字符串,返回它们的和(用二进制表示)。

输入为 非空 字符串且只包含数字 1 和 0。
示例 1:

输入: a = “11”, b = “1”
输出: “100”

示例 2:

输入: a = “1010”, b = “1011”
输出: “10101”

提示:
每个字符串仅由字符 ‘0’ 或 ‘1’ 组成。
1 <= a.length, b.length <= 10^4
字符串如果不是 “0” ,就都不含前导零

  1. 转为二进制
const addBinary = (a, b) => {
	return (parseInt(a, 2) + parseInt(b, 2)).toString(2)
}
  1. 将短字符串补 0 对齐,从末尾进行遍历计算,最后反转得到实际的结果
const addBinary = (a, b) => {
	let ans = "";
	// ca 用来保存进位,下次计算时赋值给 sum,当位相加结果需要进位时,将 ca 赋值为 1,否则为 0
    let ca = 0;
    for(let i = a.length - 1, j = b.length - 1;i >= 0 || j >= 0; i--, j--) {
        let sum = ca;
        sum += i >= 0 ? parseInt(a[i]) : 0;
        sum += j >= 0 ? parseInt(b[j]) : 0;
        // 相加结果取模,得到该位置上的数
        ans += sum % 2;
        // 判断是否需要进位
        ca = Math.floor(sum / 2);
    }
    // 循环完最长的字符串后,判断最高位是否需要进位
    ans += ca == 1 ? ca : "";
    // 因为是从末尾相加,所以需要反转
    return ans.split('').reverse().join('');
}

你可能感兴趣的:(leetcode,javascript)