给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1 和 0。
示例 1:
输入: a = "11", b = "1"
输出: "100"
示例 2:
输入: a = "1010", b = "1011"
输出: "10101"
提示:
每个字符串仅由字符 '0' 或 '1' 组成。
1 <= a.length, b.length <= 10^4
字符串如果不是 "0" ,就都不含前导零。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-binary
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
学到了一个新的ES6 字符串扩展方法
padStart(),padEnd()
用来补全字符串
'x'.padStart(5, 'ab') // 'ababx'
'x'.padStart(4, 'ab') // 'abax'
'x'.padEnd(5, 'ab') // 'xabab'
'x'.padEnd(4, 'ab') // 'xaba'
/**
* @param {string} a
* @param {string} b
* @return {string}
*/
var addBinary = function(a, b) {
//获取最大的字符串长度 判断是否进位的变量
let length = Math.max(a.length, b.length),
flag = 0,sum = 0,str = "";
//根据最大长度用`"0"`补全字符串
a = a.padStart(length, '0');
b = b.padStart(length, '0')
for (let i = length - 1; i >= 0; i--) {
//计算同位置数字加flag的值
sum = (parseInt(a[i]) + parseInt(b[i]) + flag);
//计算flag 的值
flag = parseInt(sum / 2);
//sum % 2 拼接字符串
str = sum % 2 + str;
}
//如果循环结束 flag 存在的话拼接到str前面
return flag ? str = flag + str : str;
};
leetcode 那个内存消耗无论我用什么方法都是超过11.11%
别人的代码也不行,很迷。
最后一次更新于2020-04-26
0 条评论