leetcode之Sum of Two Integers(371)

题目:

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

示例 1:

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

示例 2:

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

C代码:

int getSum(int a, int b) {
    int sum = 0,carry = 0;
    while(b)
    {
        sum = a ^ b;
        carry = (a & b) << 1;
        a = sum;
        b = carry;
    }
    return a;   
}

Python代码1:

class Solution:
    def getSum(self, a, b):
        MAX = 0x7FFFFFFF
        MIN = 0x80000000
        mask = 0xFFFFFFFF
        while b != 0:
            a, b = (a ^ b) & mask, ((a & b) << 1) & mask
        return a if a <= MAX else ~(a ^ mask)

Python代码2:

class Solution(object):
    def getSum(self, a, b):
        l = [a,b]
        return sum(l)

心得:此题考查的是位运算的知识,由于Python不是固定的32位,所以实现起来稍微繁琐,Python1的思路和C的思路是一样的,关于位运算实现相加的算法,先举一个十进制加法的例子,比如45+67=112,如果不考虑进位得到的结果是2,只考虑进位得到的结果是110,加起来正好是112,对于二进制其实也是这样的,因此我们可以将加操作和进位操作分开,二进制不进位加法其实就是异或操作,而进位操作实际上就是两个数对应位都为1时的左移,考虑到进位次数有限,当进位为0时,加出来的就是答案了。Python代码2只是满足题意的一个代码,不作为算法练习使用。

猜你喜欢

转载自blog.csdn.net/cuicheng01/article/details/82731264
今日推荐