371. Sum of Two Integers

371. Sum of Two Integers_第1张图片

感觉要用位运算,但是不知道怎么做

最优解

Java

public class Solution {
    public int getSum(int a, int b) {
        return b==0? a:getSum((a^b),(a&b)<<1);
    }
}

两位单独的位相加其结果可以用异或得到, 进位可以用与得到
举个例子: 11+5, 其二进制形式为11: 1011, 5: 0101

  1. 那么两个位置都为1的地方就需要进位, 所以进位值就为0001. 原位置两个数相加的结果为那个位置值的异或即1110, 即两个位置值如果不一样就为1, 一样的话要么两个位置原来值都为0结果也为0, 要么进位, 那么结果依然是0.

  2. 接下来就要把进位位和下一位相加, 所以进位值左移一位,即0001变为0010, 重复上面操作可得新的进位值为0010, 原位置异或(即相加)结果为1100.

  3. 继续重复上面操作直到进位为0, 可得到最终结果10000, 即16

即把每一位加法转换成异或和与操作。每一位的值可以用异或得到,每一位向前一位的进位可以用于和左移

你可能感兴趣的:(371. Sum of Two Integers)