29 Divide Two Integers

看到题目之后,想到了使用二分法进行处理,但是如果只是单纯用减法的话,得到解的速度太慢了~,采用位运算的方法,对于divisor进行移位操作,这样来加快二分的处理过程~

Python

class Solution(object):
    def divide(self, dividend, divisor):
        """
        :type dividend: int
        :type divisor: int
        :rtype: int
        """
        flag = (dividend < 0) ^ (divisor < 0)
        dividend, divisor = abs(dividend), abs(divisor)
        ans = 0
        while divisor <= dividend:
            temp = 1
            div = divisor
            while (div << 1) <= dividend:
                div <<= 1
                temp <<= 1
            dividend -= div
            ans += temp
            if ans >= 0x7r:
                if flag and ans == 0x80000000:
                    return -0x80000000
                return 0x7fffffff
        return ans if not flag else -ans

Java

class Solution {
    public int divide(int dividend, int divisor) {
    if(divisor == 0)
    {
        return Integer.MAX_VALUE;
    }
    boolean isNeg = (dividend^divisor)>>>31 == 1;
    int res = 0;
    if(dividend == Integer.MIN_VALUE)
    {
        dividend += Math.abs(divisor);
        if(divisor == -1)
        {
            return Integer.MAX_VALUE;
        }
        res++;
    }
    if(divisor == Integer.MIN_VALUE)
    {
        return res;
    }
    dividend = Math.abs(dividend);
    divisor = Math.abs(divisor);
    int digit = 0;
    while(divisor <= (dividend>>1))
    {
        divisor <<= 1;
        digit++;
    }
    while(digit>=0)
    {
        if(dividend>=divisor)
        {
            res += 1<<digit;
            dividend -= divisor;
        }
        divisor >>= 1;
        digit--;
    }
    return isNeg?-res:res;
    }
}

results matching ""

    No results matching ""