4-5 67. 二进制求和
Date:2022-04-05 09:32:22
题目:67. 二进制求和 ( 简单😄 )
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1
和 0
。
示例
示例1:
输入: a = "11", b = "1"
输出: "100"
示例2:
输入: a = "1010", b = "1011"
输出: "10101"
分析
模拟
先补位,再从后向前相加
10101
+ 00010
= 10111
重点:
取当前位的值
(carry + a + b) % 2
取当前进位
(carry + a + b) / 2(注意向下取整)
题解
模拟
function addBinary(a: string, b: string): string {
const lenA = a.length,
lenB = b.length
let max = 0
if (lenA > lenB) {
max = lenA
b = b.padStart(lenA, '0')
} else {
max = lenB
a = a.padStart(lenB, '0')
}
let carry = 0,
ans = ''
for (let i = max - 1; i >= 0; --i) {
const sum = carry + Number(a.charAt(i)) + Number(b.charAt(i))
ans = String(sum % 2) + ans
carry = Math.floor(sum / 2)
}
return carry == 0 ? ans : String(carry) + ans
}
使用
function main() {
const a = '11',
b = '1'
// const a = '1010',
// b = '1011'
console.log('[]:', addBinary(a, b))
}
main()