本文主要是介绍LeetCode67:二进制求和,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0。
输入: a = "11", b = "1"
输出: "100"输入: a = "1010", b = "1011"
输出: "10101"
分析
动手计算总结规律。
1)首先,需要将短的一个在前面进行补0,使两个数组长度相同。
2)从后往前逐位相加。其中,返回值头部为(sum+jw)%2,进位为(sum+jw)/2。
3)最后,当jw不为0时,返回值头部要追加进位。
代码
/*** @param {string} a* @param {string} b* @return {string}*/
var addBinary = function(a, b) {// 转化为数组var as = a.split('')var bs = b.split('')// 补零var al = as.lengthvar bl = bs.lengthif(al < bl){for(var i=1;i<= bl-al;i++){ as.unshift('0')}}else{for(var i=1;i<= al-bl;i++){ bs.unshift('0')}}// 从后向前逐位求和var sum = 0 var jw = 0 var res = ''for(var i=as.length-1;i>=0;i--){// 对应位置之和【注意转化为数值】sum = as[i]*1+bs[i]*1// 返回值头部res = (sum+jw)%2 + res// 进位jw = Math.floor((sum+jw)/2)}// 最后,当jw不为0时,返回值头部追加进位if(jw){res = jw + res}// 返回结果return res
};
这篇关于LeetCode67:二进制求和的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!