• leetcode 371. Sum of Two Integers


    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)
  • 相关阅读:
    Hadoop 文件系统命令行基础
    Mac bash 远程连接阿里云服务器
    Master in Vocab -- Day Six
    Master in Vocab -- Day Five
    Master in Vocab -- Day Four
    Master in Vocab -- Day Three
    mybatis学习一
    mysql事务,视图,权限管理,索引,存储引擎(胖胖老师)
    SpringAOP
    Spring事务
  • 原文地址:https://www.cnblogs.com/bonelee/p/8593090.html
Copyright © 2020-2023  润新知