题目描述:
给你两个二进制字符串
a
和b
,以二进制字符串的形式返回它们的和。输入:a = "11", b = "1" 输出:"100"
解题思路:
维护双指针+进位标识
从末尾开始加,有进位符===1,就加当前的两个数再+1,进位符为0,就只加两个数
加了之后的结果对2取余 ,通过加之后的值>=2 来判断是否要进位
解法一:
function addBinary(a, b) {
// 进位符 0:没有进位 1:有进位
let signal = 0;
// 字符串a当前的下标
let pointera = a.length - 1;
// 字符串b当前的下标
let pointerb = b.length - 1;
// 最终相加之后的结果
let sum = '';
// 字符串ab没有到头,或者两个都到头了但是还有进位就进循环
while (pointera >=0 || pointerb >= 0 || signal) {
// 有进位符就两数相加再加1
let num = signal
? ((+a[pointera] || 0) + (+b[pointerb] || 0) + 1)
: ((+a[pointera] || 0) + (+b[pointerb] || 0))
// 加完之后的结果对2取余再拼接字符串
sum = (num % 2).toString() + sum;
// 根据相加的结果设置进位符的值
signal = num >= 2 ? 1 : 0;
// 移动指针
pointera--;
pointerb--;
}
return sum;
};
用时:
- Your runtime beats 87.69 % of typescript submissions
- Your memory usage beats 89.23 % of typescript submissions (43.7 MB)