原题目:x 的平方根
查看题解,使用到了牛顿法。
公式:
作者已经讲得很清楚了,只是看这里的公式中的和的时候卡了一下,后来理解了,其实就是进行尝试的起始点,然后进行图中的迭代公示后得到的(其实就是所求的)是下一次的起始点,在图中就是那条斜线与轴的焦点的位置。那么,如果一个值的平方考虑到可能会溢出的话,如何避免计算平方值呢?代码中写的很清楚的了,因为牛顿法考的是一次次的迭代靠近真实值,那么这样的每次迭代的进步空间聚会越来越小。最后只要要求两次的差值小于某个固定的很小的数就可以了。
在这里插入代码片
class Solution:
def mySqrt(self, x):
if x < 0:
raise Exception('不能输入负数')
if x == 0:
return 0
# 起始的时候在 1 ,这可以比较随意设置
cur = 1
while True:
pre = cur
cur = (cur + x / cur) / 2
if abs(cur - pre) < 1e-6:
return int(cur)
来源:CSDN
作者:CTTACM
链接:https://blog.csdn.net/CTTACM/article/details/103670277