给你一个非负整数 x ,计算并返回 x 的 算术平方根 。由于返回类型是整数,结果只保留整数部分 ,小数部分将被舍去 。
我们可以使用「二分查找」来查找这个整数,不断缩小上下边界范围。
猜的数平方以后大了就往小了猜;
猜的数平方以后恰恰好等于输入的数就找到了;
猜的数平方以后小了,可能猜的数就是,也可能不是。
class Solution:
def mySqrt(self, x: int) -> int:
left = 0
right = x
res = -1
while left <= right:
mid = (left+right) // 2
if mid*mid > x:
right = mid-1
elif mid*mid < x:
res = mid
left = mid+1
else:
return mid
return res