Skip to content

Latest commit

 

History

History
52 lines (46 loc) · 1.18 KB

File metadata and controls

52 lines (46 loc) · 1.18 KB

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" ,就都不含前导零。

解答:

/**
 * @param {string} a 
 * @param {string} b
 * @return {string}
 * 熟悉二进制的转换规则
 * 0 + 0 = 0, 0 + 1 = 1, 1 + 0 = 1, 1 + 1 = 1
 */
var addBinary = function(a, b) {
  // 最终结果
  var result = ''
  // 是否进一位
  var lastCa = 0
  for (var i = a.length - 1, j = b.length -1; i >=0 || j >= 0; i--, j--) {
    var sum = lastCa
    sum += (i >= 0 ? parseInt(a[i]) : 0 )
    sum += (j >= 0 ? parseInt(b[j]) : 0 )
    // sum可能值为 0,1,2,3,当为2,则取0,为3取1
    result += sum % 2
    // 是否进位,sum:0,1不进,2,3进位
    lastCa = Math.floor(sum / 2)
  }
  // 最后一位是否有进位
  result += lastCa === 1 ? lastCa : ''
  return result.split('').reverse().join('')
};