「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
};
复制代码
相关文章
相关标签/搜索