LeetCode-Sqrt(x)

本文介绍了一种使用牛顿迭代法实现整数平方根计算的方法。通过迭代公式逐步逼近精确值,并在达到一定精度后返回整数部分。文中给出了具体的Java实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description:
Implement int sqrt(int x).

Compute and return the square root of x, where x is guaranteed to be a non-negative integer.

Since the return type is an integer, the decimal digits are truncated and only the integer part of the result is returned.

Example 1:
Input: 4
Output: 2

Example 2:
Input: 8
Output: 2

Explanation:
The square root of 8 is 2.82842…, and the decimal part is truncated, 2 is returned.

题意:模拟函数Sqrt(x)的功能,求一个数的开平方(取整数);

解法:Java中函数sqrt(x)所使用的原理是“牛顿迭代法”

xn+1=xnf(xn)f(xn)xn+1=xn−f(xn)f′(xn)
  1. 对于我们要求的数r的平方根x,有等式x2=rx2=r,即:
    f=x2rf=x2−r
  2. 利用牛顿迭代法我们可以得到:
    xn+1=xnf(xn)f(xn)xn+1=xn−f(xn)f′(xn)
    xn+1=xnx2r2xxn+1=xn−x2−r2x
    xn+1=xn12(xr/x)xn+1=xn−12(x−r/x)
    xn+1=12(xn+r/x)xn+1=12(xn+r/x)
  3. 在迭代的开始阶段,x的值可以取r,迭代的结束条件是x2=rx2=r,因此这里我们使用了一个误差e7e−7
class Solution {
    public int mySqrt(int x) {
        double err = 1e-7;
        double result = x;
        while(Math.abs(result - x/result) > err){
            result = (result + x/result)/2.0;
        }
        return (int)result;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值