其实数值分析的时候应该可能教过?但忘记了。。重新复习一遍叭!
代码:
class Solution {
public:
int mySqrt(int x) {
long int r=x;
if(x<=1)return int(x);
while(r>x/r) r=(r+x/r)/2;
return int(r);
}
};
原理:http://www.matrix67.com/blog/archives/361
我的理解是这样的:假如说我们给定一个a,想要求其平方根,我们就需要构造一个xx=a的方程。刚开始x取多少无所谓,我们可以通过x=(x+a/x)/2来逐步逼近所求解,因为xx=a的导数为2x,那么x-f(x)/2x就是比x更接近的值。(牛顿法原式 x’=x-f(x)/f’(x)),此时f(x)为x*x-a,通过逐步逼近,最终得到想要的值。