[leedcode 69] Sqrt(x)
Implement int sqrt(int x)
.
Compute and return the square root of x.
public class Solution { //本题利用了牛顿迭代法:设r是f(x) = 0的根(x^2-k=f(x)),选取x0作为r初始近似值,过点(x0,f(x0))做曲线y = f(x)的切线L,L的方程为y = f(x0 //)+f'(x0)(x-x0),求出L与x轴交点的横坐标 x1 = x0-f(x0)/f'(x0),称x1为r的一次近似值。 //过点(x1,f(x1))做曲线y = f(x)的切线,并求该切线与x轴交点的横坐标 x2 = x1-f(x1)/f'(x1),称x2为r的二次近似值。重复以上过程,得r的近似值 //序列,其中x(n+1)=x(n)-f(x(n))/f'(x(n)),称为r的n+1次近似值,上式称为牛顿迭代公式。 //根据牛顿迭代的原理,可以得到以下的迭代公式:X(n+1)=[X(n)+p/Xn]/2 //还可以用常识性知识考虑,x=(x+k/x)/2 //本题注意点: //1.返回结果要先声明为double //2.需要检查参数的正负 //3.注意1e-6的写法 public int mySqrt(int x) { if(x<=0) return 0; double res=1.0; while(Math.abs(res*res-x)>1e-6){ res=(res+x/res)/2; } return (int)res; } }