class Solution:
def mySqrt(self, x: int) -> int:
return self.find(0,x,x)
def find(self,left,right,target):
if target==0 or target==1:
return target
while left<right:
mid = left + (right - left) // 2
if mid*mid<=target and (mid+1)*(mid+1)>target:
return mid
elif (mid+1)*(mid+1)<=target:
left=mid+1
else:
right=mid
补充:实现double_sqrt()函数
牛顿迭代法
class Solution:
def mySqrt(self, x: int) -> int:
if x == 0:
return 0
C, x0 = float(x), float(x)
while True:
xi = 0.5 * (x0 + C / x0)
if abs(x0 - xi) < 1e-7:
break
x0 = xi
return x0