243 字
1 分钟
LeetCode 题解-371. Sum of Two Integers

对Leetcode 371. Sum of Two Integers 题目的求解。

Problem Description#

Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.

Example 1#

Input: a = 1, b = 2
Output: 3

Example 2#

Input: a = -2, b = 3
Output: 1

Analysis#

在不使用内置加法运算的情况下求两个数的和,我们需要依赖位运算.在位运算中我们需要关注两种运算

  • 异或.两个数异或的结果恰恰是不进位加法的结果.
  • 与.两个数与运算后的结果恰恰是进位的结果.

所以对于a+b,我们求得异或和与的结果之后,再将两个结果相加,长此以往,直到其中一个为零:没有进位了,或者加法结果恰好为2^n.

Solution 1: bfs with recursive call#

class Solution{
public static int getSum(int a, int b) {
while (a != 0 && b != 0){
int tmp = a ^ b;
b = (a & b) << 1;
a = tmp;
//System.out.printf("%d %d\n", a, b);
}
if (a == 0) return b;
else return a;
}
}