LeetCode.371. 两整数之和

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

示例 1:

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

示例 2:

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

思路1:

使用自加自减运算符。但是Python由于效率问题无法通过,以下使用C实现并通过。
另,LeetCode在C中直接返回a+b也可通过。

代码1:

int getSum(int a, int b) {
    if(b==0) 
        return a;
    else if(b>0)
    {
        while(b)
        {
            a++;
            b--;
        }
        return a;
    }
    else
    {
        while (b!=0)
        {
            a--;
            b++;
        }
        return a;
    }    
}

分析1:

时间复杂度O(n),空间复杂度O(0)

思路2:

使用Python数组求和函数sum

代码2:

class Solution:
    def getSum(self, a, b):
        """
        :type a: int
        :type b: int
        :rtype: int
        """
        return sum([a,b])

分析2:

时间复杂度O(n),空间复杂度O(0)

思路3:

位运算。第一步,不考虑进位相加,即异或(xor)符号^;第二步,记下进位,作位与运算(or)符号为&,并左移一位;第三部,重复以上运算,直到不产生进位。

代码3:

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

分析3:

此算法使用C语言实现用时极短。在LeetCode中击败了100%的提交。

你可能感兴趣的:(Leetcode)