题目描述:
题解:
1.采用二分法,x的平方根除1和0外,在[1,x/2]之间。
2.首先考虑x=0和1的特殊情况。
3.对其他x的取值,初始化left=1,right=x//2,然后不断二分,mid=(left+right)//2,首先判断left right mid三个取值的平方是否等于x,等于则直接返回。否则判断mid的平方与x的关系,如果大于x,则取小的区间,right=mid-1,否则取较大的区间left=mid+1。
4.因为需要直接舍弃小数字段,对最后的mid进行判断,如果mid的平方小于等于x,返回mid为最终结果,否则返回mid-1。
class Solution(object): def mySqrt(self, x): if x==0: return 0 if x==1: return 1 left = 1 right = x//2 while left<=right: mid = (left+right)//2 if int(pow(left,2))==x: return left if int(pow(right,2))==x: return right if int(pow(mid,2))==x: return mid if int(pow(mid,2))<x: left=mid+1 if int(pow(mid,2))>x: right=mid-1 if int(pow(mid,2))<=x: return mid else: return mid-1