zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    Redis系列八 使用Jedis
    Redis系列七 主从复制(Master/Slave)
    Redis系列六 Redis事务
    Redis系列五 Redis持久化
    Android7.0 应用内升级
    Redis系列四 Redis常见配置
    06方法
    python协程--yield和yield from
    Python2 生成器 简介
    使用virtualenv使得Python2和Python3并存
  • 原文地址:https://www.cnblogs.com/bonelee/p/8593090.html
Copyright © 2011-2022 走看看