023-力扣刷题-69--x-的平方根

实现 int sqrt(int x) 函数。

计算并返回 x 的平方根,其中 x 是非负整数。

由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

示例 1:

输入: 4 输出: 2 示例 2:

输入: 8 输出: 2 说明: 8 的平方根是 2.82842...,   由于返回类型是整数,小数部分将被舍去。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
class Solution(object):
    def mySqrt(self, x):
        """
        :type x: int
        :rtype: int
        """
        if x <2:
            return x
        left,right =1,x//2   #最小从1开始,最大的值顶多是除以2的整数

        while left <=right:
            mid = left+( right-left)//2  #求的是left和right的中间值
            if mid > x/mid: #这行代码的意思就是说现在的这个mid值偏大mid**2 = x 这么去算的
                right = mid -1 #这个就是说偏大的话就让右边的值左移缩小范围,让中间值减小
            else:
                left = mid+1 #如果我们求的mid比较小的话就让left右移增大mid的值
        return left - 1  #这个的话是因为进了最后循环结束的条件left肯定要多加1最后减掉1