算法训练-二进制加法
生活随笔
收集整理的這篇文章主要介紹了
算法训练-二进制加法
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
二進制加法
1.題目描述
給定兩個 01 字符串 a 和 b ,請計算它們的和,并以二進制字符串的形式輸出。 示例 1: 輸入: a = "11", b = "10" 輸出: "101" 示例 2: 輸入: a = "1010", b = "1011" 輸出: "10101" 提示: 每個字符串僅由字符 '0' 或 '1' 組成。 1 <= a.length, b.length <= 10^4 字符串如果不是 "0" ,就都不含前導零。2.題目來源
劍指offer(專項突擊版) [劍指offer|| 002]二進制加法
力扣官網(wǎng)
3.題解
解答這道題的問題是兩個數(shù)的加法運算是從低位到高位的,我們要將字符串從后往前遍歷,最后求得的結(jié)果再翻轉(zhuǎn)
另外我們還要考慮兩個字符串長度不一樣的情況,遍歷時我們需要判斷字符串是否遍歷完成,這樣才能獲取正確結(jié)果
下方代碼中,ans表示結(jié)果字符串,ca表示進位的值,sum表示當前遍歷位的值,如果sum>=2,我們需要往后進一位,遍歷到下一個值時,我們需要讓sum加上遍歷上一個值是所進的位數(shù)值
var addBinary = function(a, b) {let ans =''let ca = 0for(let i =a.length-1,j=b.length-1;i>=0||j>=0;i--,j--){let sum = casum += i>=0 ? parseInt(a[i]) : 0//如果a遍歷完成了,sum不再加a[i]sum += j>=0 ? parseInt(b[j]) : 0//如果b遍歷完成了,sum不再加b[i]ans += sum % 2 //將當前位的值加入到ans中,如果sum=2,則當前位為0ca = Math.floor(sum / 2)//向下取整sum/2,如果sum=2,則進位加1}ans += ca>0? 1 : ''//最后判斷進位的值,如果ca>0,結(jié)果應該加進位1,否則不變return ans.split('').reverse().join('')//最后將字符串進行反轉(zhuǎn)求得結(jié)果 };總結(jié)
以上是生活随笔為你收集整理的算法训练-二进制加法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: redhat7安装oracle11gR2
- 下一篇: iCamera App Kit 使用说明