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;
}
}