class Solution:
def mySqrt(self, x: int) -> int:
# 对0做特殊处理,对数的性质
if x == 0:
return 0
# 根据公式
ans = int(math.exp(0.5*math.log(x)))
# 对精度问题做一个特殊处理,如果结果+1的平方1小于目标数的话,那取原结果,因为超精度里,否则需要+1
return ans + 1 if(ans + 1) ** 2 <= x else ans
公式
解法2 二分法
class Solution:
def mySqrt(self, x: int) -> int:
# 二分法,数值型二分,非下标型二分
left = 0
right = x
ans = -1
while left <= right:
# 取整除,只取商的整数部分
mid = (left + right) // 2
# 二分算法
if mid * mid <= x:
ans = mid
left = mid + 1
else :
right = mid - 1
return ans