解法有三种,1.二分法,2. 基本不等式法(牛顿迭代法)
基本知识是:一个数的根号不可能大于这个数的一半
二分法,无理解难点,就是边界条件需要琢磨一下。
class Solution:def mySqrt(self, x: int) -> int:if x <= 1:return xleft = 1 #1 right = x //2 +1 # 5, 2 while left < right:mid = left + (right - left + 1) //2if mid **2 == x:return midif mid ** 2 < x:left = midelse:right = mid -1 return left
基本不等式法或者称为牛顿迭代法,速度一下就提起来了。原理是 (a + b) /2 >= genhao// >= /ab, 这里的a是x, b是x/r.
class Solution:def mySqrt(self, x: int) -> int:if x <=1:return x r = x / 2while r**2 > x:r = (r + x/r) // 2 # 这里必须是整除return int(r)