求x的平方根

Posted by 大雁小鱼的博客 on May 23, 2018

LeetCode 第69题 求x的平方根

题目

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

思考

这道题一看到,作为程序员的我首先的反应是穷举,但是由于复杂度太高必定超时。我之前遇到过一些学数学的朋友,聊天的时候他们会说一些关于如何用程序计算某某公式的东西。
于是我百度了一下,在计算数学里面有一个牛顿迭代法的东东,可以算任意一个曲线和X轴的交点的无限逼近值,这东西就可以用于解决我们的问题。

牛顿迭代法

这是一种求交点的思想,如果感兴趣的可以去这个网站(https://www.zhihu.com/question/20690553 )上学习一波,此处不再赘述。
根据牛顿迭代法可以知道,如果想要求78的平方根,其实就是求下面这个方程的根:

于是根据牛顿迭代法就能求。

代码如下