python求x的平方根
方法一:暴力法
class Solution:
def mySqrt(self, x: int) -> int:
if x< 0:
return False
else:
y=int(x**0.5)
return y
这里的x0.5中的就是幂次方的意思,那么0.5就是根号的意思了,注意这里我们需要int类型的数字。
方法二:牛顿迭代法
注释:上图摘至liweiwei的算法与数据结构
具体的牛顿法大家可以参考:如何通俗易懂地讲解牛顿迭代法求开方?
class Solution:
def mySqrt(self, x):
if x < 0:
return False
if x == 0:
return 0
# 起始的时候在 1 ,这可以比较随意设置
cur = 1
while True:
pre = cur#记录之前的cur
cur = (cur + x / cur) / 2
if abs(cur - pre) < 1e-6:# 如果后门的cur和pre相差大概1e-6时就可以断定cur就是这个数的开方了。
return int(cur)
所以cur就是我们要求的根号出来的值,
这里需要重点理解while语句里面的内容(小编已经在代码里面注释了),以及1e-6的意思(1e-6表示 11 乘以 1010 的负 66 次方,也就是 0.0000010.000001)表示一个很小很小的数字。
方法三:二分法
class Solution:
def mySqrt(self, x: int) -> int:
# 为了照顾到 0 把左边界设置为 0
left = 0
# 为了照顾到 1 把右边界设置为 x // 2 + 1
right = x // 2 + 1
while left < right:
# 注意:这里一定取右中位数,如果取左中位数,代码可能会进入死循环
# mid = left + (right - left + 1) // 2
mid = (left + right + 1) >> 1
square = mid * mid
if square > x:
right = mid - 1
else:
left = mid
# 因为一定存在,因此无需后处理
return left