「leetcode」371.兩整數之和

原題

不使用運算符 + 和 - ​​​​​​​,計算兩整數 ​​​​​​​a 、b ​​​​​​​之和。spa

示例 1:code

輸入: a = 1, b = 2
輸出: 3
複製代碼

示例 2:leetcode

輸入: a = -2, b = 3
輸出: 1
複製代碼

思路

感謝評論區大佬的提示get

🧮首先讓咱們回憶一下小學的時候,如何計算加法的io

10509
+  20501
--------
   31010

// 咱們將加法的步驟拆解成`加`與`進位`兩個步驟

// 只計算加
   10509
+  20501
--------
   30000

// 只計算進位
   10509
+  20501
--------
   01010

// 進位加上加的結果,獲得最終的結果
   30000
+  01010
--------
   31010
複製代碼

這道題目的解答思路也是相似的,咱們先來回憶如下,異或的規則以及按位與的規則, 1 ^ 1 等於 0; 1 ^ 0 等於 1;0 ^ 1 等於1;0 ^ 0等於0相似與咱們的加法可是不帶進位function

0b1010 ^
  0b1001
--------
  0b0011
複製代碼

咱們再來回憶如下,按爲與的規則,1 & 1 等於 1; 1 & 0 等於 0;0 & 1 等於0;0 & 0等於0, 相似咱們的進位,可是進位的位置不太對,咱們須要左移一位class

0b1010 &
  0b1001
--------
  0b1000

// 結果等於0b10000
0b1000 << 1
複製代碼

咱們這時將進位(按位與的結果)加上加法的結果(異或的結果),就是咱們的答案word

代碼

/** * @param {number} a * @param {number} b * @return {number} */
var getSum = function(a, b) {
    const sum = a ^ b
    const carry = (a & b) << 1
    if (carry != 0) {
        return getSum(sum, carry)
    }
    return sum
};
複製代碼
相關文章
相關標籤/搜索