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 = 2Output: 3Example 2
Input: a = -2, b = 3Output: 1Analysis
在不使用内置加法运算的情况下求两个数的和,我们需要依赖位运算.在位运算中我们需要关注两种运算
- 异或.两个数异或的结果恰恰是不进位加法的结果.
- 与.两个数与运算后的结果恰恰是进位的结果.
所以对于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; }}