• leetcode-mid-math-371. Sum of Two Integers-NO-???


    mycode:

    没思路啊。。。二级制四则运算不熟悉。。。

    参考:

    既然不能使用加法和减法,那么就用位操作。下面以计算5+4的例子说明如何用位操作实现加法:
    1. 用二进制表示两个加数,a=5=0101,b=4=0100;
    2. 用and(&)操作得到所有位上的进位carry=0100;
    3. 用xor(^)操作找到a和b不同的位,赋值给a,a=0001;
    4. 将进位carry左移一位,赋值给b,b=1000;
    5. 循环直到进位carry为0,此时得到a=1001,即最后的sum。

    上面思路还算正常,然而对于Python就有点麻烦了。因为Python的整数不是固定的32位,所以需要做一些特殊的处理,具体见代码吧。
    代码里的将一个数对0x100000000取模(注意:Python的取模运算结果恒为非负数),是希望该数的二进制表示从第32位开始到更高的位都同是0(最低位是第0位),以在0-31位上模拟一个32位的int。

    注意:

    对于:该数的二进制表示从第32位开始到更高的位都同是0  ~  方法一:取余数 方法二:异或

    return:不懂。。?????

    class Solution(object):
        def getSum(self, a, b):
            """
            :type a: int
            :type b: int
            :rtype: int
            """
            while b != 0:
                carry = a & b
                a = (a ^ b) % 0x100000000
                b = (carry << 1) % 0x100000000
            return a if a <= 0x7FFFFFFF else a | (~0x100000000+1)
    class Solution(object):
        def getSum(self, a, b):
            """
            :type a: int
            :type b: int
            :rtype: int
            """
            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)
  • 相关阅读:
    常见算法之17---二叉树相等判断以及二叉树的复制
    常见算法之16---二维数组中查找元素
    常见算法之15---求N!末尾有多少个0
    常见算法之14---球放入盒问题
    常见算法之13---跳台阶问题
    常见算法之12---求a^n%p
    DB与java的关联
    重拾python
    Codeforces Round 212 Div 2 报告(以前没写完,现在也没心情补了,先就这样吧)
    交换Ctrl和Caps Lock键
  • 原文地址:https://www.cnblogs.com/rosyYY/p/10984323.html
Copyright © 2020-2023  润新知