classSolution: defmySqrt(self, x: int) -> int: l,r = 0,x while l<=r: #注意l=r时仍需判断 mid = (l+r)//2 if mid*mid==x:return mid if mid*mid>x:r=mid-1 else:l=mid+1 return r #向下取整
本次的判断最好不用mid * mid== x而是用mid== x / mid来避免数据溢出。
1 2 3 4 5 6 7 8 9 10
classSolution: defmySqrt(self, x: int) -> int: if x==0 :return0 l,r = 1,x while l<=r: mid = (l+r)//2 if mid== x / mid:return mid if mid*mid>x:r=mid-1 else:l=mid+1 return r