力扣题库之二进制求合

力扣题库之二进制求合力扣题库之二进制求合对于这道题目 虽然使用字符串 API 实现较为简单 但当字符串长度超出计算机计算范围时 计算结果会失真

大家好,欢迎来到IT知识分享网。

力扣题库之二进制求合

  • 对于这道题目,虽然使用字符串API实现较为简单,但当字符串长度超出计算机计算范围时,计算结果会失真。
  • 所以我的思路是 : 取两个字符串较短的那个长度为遍历对打长度(length)。将这一段先相加,考虑0-1相加有4中情况 即 0,1,2,3. index记录下标 0,1时index为0 表示无进位。 2,3时 index为1,表示有进位
  • 在考虑两个字符串长度相等和不等的情况下,多余的那节字符串是否可以直接拼接大到盛放结果的新数组中
// 给你两个二进制字符串,返回它们的和(用二进制表示)。  // 输入为 非空 字符串且只包含数字 1 和 0。 var addBinary = function(str1, str2) { 
    //下面这种方法虽然简单,但是如果字符串长度太长,计算机会丢失精度 /* str1 = parseInt(str1 , 2) str2 = parseInt(str2 , 2) var num = str1 + str2 return num.toString(2) */ //先获取较短的那个字符串的长度 var length = Math.min(str1.length, str2.length) //二进制运算,结果只有四种 0,1,2,3(1 + 1 还有进位1) //创建一个数组,用来存放二进制数字 var arr = [] //记录是否进一 var index = 0; //如果长度不一样,那么还要再前面插入未比较的字符串段 // 比较两个字符串那个是长的 var reg = str1.length - str2.length if(reg > 0){ 
    var temp = str1 str1 = str2; str2 = temp } //str2为长字符串 //遍历字符串,长度为length for( var i = length - 1 ; i >= 0 ; i--){ 
    // console.log(i) var sum = Number(str1[i]) + Number(str2[i + Math.abs(reg)]) + index // console.log(sum) if(sum === 0){ 
    index = 0 arr.unshift(0) } if(sum === 1){ 
    index = 0 arr.unshift(1) } if(sum === 2){ 
    //这时候需要进一 index = 1 arr.unshift(0) } if(sum === 3){ 
    index = 1 arr.unshift(1) } // console.log(Number(str1[i]) , Number(str2[i]) , index ,sum , arr)  } // console.log(arr) //如果第一项,即i = 0,sum 为2或者3时,需要在前面插入1 if(reg === 0){ 
    var sum_0 = Number(str1[0]) + Number(str2[Math.abs(reg)]) + index if(sum_0 === 2){ 
    arr.unshift(0) index = 1 } if(sum_0 === 3){ 
    arr.unshift(1) index = 1 } } // console.log(str1,str2) // console.log(arr) //这时,长字符串是str2 ,将str2转为数组并将未比较的那部分拼接在arr前面! var newArr = str2.split("").splice(0,str2.length - length) // console.log(newArr ,arr) //判断index是否为1,这是比较的那一段字符串进位出来的,如果为1,那么未比较的那段字符串还要继续加一 if(index && reg !== 0){ 
    // console.log(newArr) var index_newarr = 1 for(var i = newArr.length - 1 ; i >= 0 ; i --){ 
    var res = Number(newArr[i]) + index_newarr // console.log(i,res , index_newarr) if(res === 0){ 
    arr.unshift(0) index_newarr = 0 } if(res === 1){ 
    arr.unshift(1) index_newarr = 0 } if(res === 2){ 
    arr.unshift(0) index_newarr = 1 } if(res === 3){ 
    arr.unshift(1) index_newarr = 1 } // console.log(arr) } if((Number(newArr[0]) + index_newarr) >= 2 && newArr.length >= 1){ 
    arr.unshift(1) } // console.log(arr) } //如果index为0 那么表示没有进位 ,直接拼接没有比较的那一段字符串 if(!index && reg != 0){ 
    return newArr.concat(arr).join("") } // return newArr.concat(arr).join("") return arr.join("") }; 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/147369.html

(0)
上一篇 2025-04-07 22:26
下一篇 2025-04-07 22:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信