題目出處:https://leetcode.com/problems/add-binary/
題目描述:
給定兩個二進制字元串,傳回它們的總和(也是二進制字元串)。
輸入字元串都是非空的,隻包含字元1或0。
Example 1:
Input: a = "11", b = "1"
Output: "100"
Example 2:
Input: a = "1010", b = "1011"
Output: "10101"
代碼:
const addBinary = (a, b) => {
let res = ''; //結果,或者每次計算的餘數,1或者0
let letleftover = 0;//是否進位
let i = a.length - 1; //第一個字元串長度
let j = b.length - 1; //第一個字元串長度
while (i >= 0 || j >= 0) {
let sum = leftover;
//把第一個2進制字元串的最後一位計算。記入sum。然後把數組i的下标定位到倒數第二位
if (i >= 0) { sum += parseInt(a[i--]); }
//把第二個2進制字元串的最後一位計算。與sum合計。然後把數組j的下标定位到倒數第二位
if (j >= 0) { sum += parseInt(b[j--]); }
//sum是否進位,若進位,leftover = 1,res = 0,若不進位,leftover = 0,res =1
res = (sum % 2) + res;
leftover = sum / 2 | 0;
}
//根據進位的實際情況講結果進行拼接
if (leftover > 0) { res = leftover + res; }
return res;
};
思路:
我自己是用parseInt,和toString來進行操作的,實際結果就是當給的字元串數字大了之後,轉化成2進制的精度可能不夠導緻無法通過submission
把2進制的計算過程複現了一遍,做起來還是很複雜,以上是别人的思路解法,我寫個注釋。
他的思路就是把人怎麼算2進制的方法,複制給計算機。從兩個2進制的數字的尾部開始進行計算,leftover是進位,res是每一次計算後的結果,每一次的res以字元串的形式相連接配接就是結果
筆記:
1.parseInt(xxx,radix),radix表示要解析的數字的基數。傳回的結果是一個數字類型。
2.xxx.toString(2),得到的結果是2進制的字元串類型