LeetCode刷题笔录Sqrt(x)

本文介绍了一种使用牛顿迭代法计算整数平方根的方法。通过不断逼近精确值来寻找x的平方根,利用迭代公式x[i+1]=x[i]/2+n/(2x[i])进行计算。

Implement int sqrt(int x).

Compute and return the square root of x.

这题当时面试的时候被问过,我记得有个牛顿迭代法。今天正好做到了就实现一下。

求n的平方根就是要求f(x)=x^2-n与x轴的交点(正的那个)。先随便猜一个数x0.如果x0不是根,那么在x0处做一个f(x)的切线,这条切线与x轴的交点x1作为下一次迭代的初值。这样迭代一会就找到解了。

在x0处的切线方程是y=2x0*x-(x0^2+n)。这样得到迭代方程为x[i+1]=x[i]/2+n/(2x[i])。

public class Solution {
    public int sqrt(int x) {
        if(x == 0)
            return 0;
        double x0 = 5.0;
        double x1 = 6.0;
        while(x0 != x1){
            x0 = x1;
            x1 = x0 / 2 + x / (2 * x0);
        }
        
        return (int)x1;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值