题目描述:
实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/sqrtx 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
示例1:
输入: 4 输出: 2
示例2:
输入: 8 输出: 2 说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。
题目难度:简单
分析:
对于牛顿迭代法百度百科是这么介绍的:
牛顿迭代法(Newton’s method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。
这里就不细说了,感兴趣的可以自己查查资料。
代码如下:
java:
class Solution { public int mySqrt(int x) { if (x == 0) return 0; long sqrt = x; while (sqrt * sqrt > x){ sqrt = (sqrt + x / sqrt) / 2; } return (int)sqrt; } }
python:
class Solution: def mySqrt(self, x: int) -> int: if x == 0: return 0 c = x while c * c > x: c = (c + x // c) // 2 return c
总结:
题目不是很难,如果知道这个方法就比较简单,如果不知道也可以用笨方法:取n=1,然后平方看看是否大于x,如大于就返回n-1,如小于等于就n++即可,代码就不写了。