LeetCode 371. 两整数之和

目录结构

1.题目

2.题解


1.题目

不使用运算符 + 和 - ,计算两整数 a 、b ​​​​​​​之和。

示例:

输入: a = 1, b = 2
输出: 3


输入: a = -2, b = 3
输出: 1

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sum-of-two-integers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2.题解

位运算。假设a = 0111,b = 0011,a + b = 1010。 

  1. ​​​​​​​​​​​​​​​​​当不考虑进位问题时,进行“异或”运算,得到加法不算进位的结果,即c = a ^ b = 0100;
  2. 接下来计算进位值,进行“与”运算,即a & b = 0011,发现此时为1的位置表示该位置产生了进位,于是左移一位,使其产生进位,即d = (a & b) << 1 = (0011) << 1 = 0110;
  3. 当进位值不为0,重复1和2:
  • 将c和d按照1方式做加法,即e = c ^ d = 0010;按照2方式计算进位,即f = (c & d) << 1 = (0100) << 1 = 1000; 
  • 将e和f按照1方式做加法,即e ^ f = 1010;按照2方式计算进位,即(e & f) << 1 = (0000) << 1 = 0000; 此时进位值为0,则1010即为结果。
public class Solution371 {

    @Test
    public void test371() {
        System.out.println(getSum(10, 20));
    }

    public int getSum(int a, int b) {
        while (b != 0) {
            int sum = a ^ b;
            b = (a & b) << 1;
            a = sum;
        }
        return a;
    }
}
  • 空间复杂度:O(1)

你可能感兴趣的:(LeetCode)