给你一个非负整数 x ,计算并返回 x 的 算术平方根 。

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

示例 1:

输入:x = 4
输出:2

示例 2:

输入:x = 8
输出:2
class Solution(object):
    def mySqrt(self, x):
        if x == 0:
            return 0
        else:
            for i in range(x+1):
                if x == i*i:
                    return i
                elif x > i*i and x < (i+1)*(i+1):
                    return i

但是会出错

LeetCode 69.x的平方根_数据结构

然后我就换成while没报内存的错误

class Solution(object):
    def mySqrt(self, x):
        if x == 0:
            return 0
        else:
            i = 0
            while i<=x:
                if x == i*i:
                    return i
                elif x > i*i and x < (i+1)*(i+1):
                    return i
                else:
                    i+=1

后来又看到用二分的,感觉自己数据结构白学了......

class Solution(object):
    def mySqrt(self, x):
        low=0
        high=x
        res = 0
        if x == 0:
            return 0
        else:
            while low<=high:
                mid = (low+high)//2
                if x>=mid*mid:
                    res=mid
                    low=mid+1
                else:
                    high=mid-1
        return res