给定两个整数,被除数 dividend
和除数 divisor
。将两数相除,要求不使用乘法、除法和 mod 运算符。
返回被除数 dividend
除以除数 divisor
得到的商。
示例 1:
输入: dividend = 10, divisor = 3 输出: 3
class Solution(object):
def divide(self, dividend, divisor):
"""
:type dividend: int
:type divisor: int
:rtype: int
"""
result=0
divi=abs(dividend)
div=abs(divisor)
while divi>=div:
divi-=div
result+=1
if dividend*divisor>0:
return result
else:
return -result
超出时间了
class Solution(object):
def negative(self, n):
return ~n+1
def positive(self, n):
t = n >> 31
return (n + t) ^ t
def negpos(self, sign, n):
return self.positive(n) if sign else self.negative(n)
def divide(self, dividend, divisor):
sign = dividend >> 31 == divisor >> 31
dividend = self.positive(dividend)
divisor = self.positive(divisor)
cnt, minus = 0, divisor
while dividend >= minus:
minus <<= 1
cnt += 1
if cnt == 0:
return 0
r = self.negpos(sign, 2**(cnt-1) +
self.divide(dividend-(minus >> 1), divisor))
if r < -2**31 or r > 2**31 - 1:
return 2**31 - 1
return r
执行用时: 36 ms, 在Divide Two Integers的Python提交中击败了91.82% 的用户