【leetcode】Python实现-69.x的平方根

69.x的平方根

描述

实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

示例1

输入: 4
输出: 2

示例2

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

我第一想法简单粗暴但超出时间限制。

        if x == 0:
            return 0
        elif x < 0:
            return 'error'
        else:
            i = 1
            while True:
                if (i+1)**2 > x >= i**2:
                    return i
                i+=1

改进一下,因为结果肯定是有序的从1,2,3.。。查找,所以使用二分查找。

        if x == 1:
            return 1
        l = 1
        h = x//2
        while h > l:
            m = (l+h)//2
            if m**2 > x:
                h = m-1
            elif m**2 < x:
                l = m+1
            else:
                return m
        if h == l:
            if (h-1)**2 < x < h**2:
                return h-1
            else:
                return h
        elif h < l:
            return h

这里比二分查找麻烦的是需要考虑,当结果不在查找的序列是按下取整。这下终于通过了,但是运行时间却是吊车尾。看看别人的,也是用的二分查找,不过是在我的第一版基础上改了一下,不像我这么笨笨地机械套用二分查找。

        if x == 0:
            return 0

        l = 1
        r = x

        while l <= x:
            res = (l + r) // 2
            s = res**2

            if s <= x < (res + 1)**2:
                return res
            if s < x:
                l = res
            if s > x:
                r = res

这个问题关键在于结果的下取整。所以我的代码在判断x与m平方的时候可以进行优化。(m-1)**2 <= x < m**2.

猜你喜欢

转载自blog.csdn.net/qq_34364995/article/details/80284351