leetcode 371. Sum of Two Integers

weixin_33912246發表於2018-03-17

Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.

Example:
Given a = 1 and b = 2, return 3.

只能位運算:

0x01101011 ^

0x00111001

----------

0x01010010

 

0x01101011 &

0x00111001

---------

0x00101001 <<1

---------

0x01010010

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

迭代解法:

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

 python版本:不明白 ~(a ^ mask) 是。。。

class Solution(object):
    def getSum(self, a, b):
        """
        :type a: int
        :type b: int
        :rtype: int
        """
        # 32 bits integer max
        MAX = 0x7FFFFFFF
        # 32 bits interger min
        MIN = 0x80000000
        # mask to get last 32 bits
        mask = 0xFFFFFFFF
        while b != 0:
            # ^ get different bits and & gets double 1s, << moves carry
            a, b = (a ^ b) & mask, ((a & b) << 1) & mask
        # if a is negative, get a's 32 bits complement positive first
        # then get 32-bit positive's Python complement negative
        return a if a <= MAX else ~(a ^ mask)

 

相關文章