天天看點

leetcode記錄:難度簡單:58.傳回字元串最後一個單詞的長度

題目出處: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進制的字元串類型