LeetCode-Sum of Two Integers

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_24133491/article/details/82796282

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

题意:计算两个正数的和,要求不可以使用加法和减法;

解法:既然说明了不可以使用加法和减法,那么我们可以考虑使用位操作;

  • 对于异或^操作来说,a ^ b得到的结果是两个数的二进制表示中不相同的位置
  • 对于与&操作来说, a & b得到的结果是两个数的二进制表示中相同的位置

要对两个数的二进制位进行求和,我们需要考虑两种情况:

  • 如果当前位两个数不相同,即一个是1,另外一个是0的情况,利用异或可以得到相加的结果
  • 如果当前位两个数相同,都是0或者都是1的情况,我们就需要考虑到进位

对于这道题目我们可以这么想,如果b已经是0了,那么相加的结果就是a了;否则,我们令a = a ^ b将两个数的二进制表示中位不相同的位置(一个位是1,另外一个位是0的情况)求和,令b = (a & b) << 1将两个数的二进制表示中位相同的位置(都是0或者都是1的情况)求和,左移一位是因为如果两个数的当前位都是1,求和会产生进位;一直重复这个操作,直到b的值为0,表示此时没有都是1的位了,也就是没有进位,说明a ^ b得到的就是最后的求和结果;

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

所有的代码都保存在GitHub

猜你喜欢

转载自blog.csdn.net/qq_24133491/article/details/82796282
今日推荐