leetcode刷题
两数相除(中等)
暴力遍历,采用两数不断相减,最后叠加b的次数,超时案例:
def divide(self, dividend, divisor):
b=0
t = dividend - divisor
while(flag):
if(t>0):
t=t-divisor
b+=1
if(t<=0):
return b
return b
正解(采用二进制移位法);
def divide(self, dividend, divisor):
if dividend == -2147483648 and divisor == -1:
return 2147483647
a, b, res = abs(dividend), abs(divisor), 0
for i in range(31, -1, -1):
if (b << i) <= a:
res += 1 << i
a -= b << i
return res if (dividend > 0) == (divisor > 0) else -res
pow(x,n)(中等)
python自带:
def myPow(self, x, n):
return x**n
自己编写:
def myPow(self,x,n):
if n<0:
return 1/self.myPow(x,-n)
res=1
track=x
while n>0:
if n&1:
res*=track
track*=track
n>>=1 #采用二进制移位
return res