题目
实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4
输出: 2
示例 2:
输入: 8
输出: 2
说明: 8 的平方根是 2.82842...,
由于返回类型是整数,小数部分将被舍去。
代码模板:
class Solution {
public int mySqrt(int x) {
}
}
分析
这个题我之前是从1开始循环然后找适合的int,结果超出了时间限制。
于是上网查资料,得知了一个叫牛顿切线法,也有地方叫做牛顿迭代法。说实话,刚开始我真的没有看懂,到后面还是没有懂。
具体可以参考:https://blog.csdn.net/hnu2012/article/details/72598038
解答
class Solution {
public int mySqrt(int x) {
if(x == 0)
return 0;
long i = x ;
while(i > x / i ){
i=(i + x / i) / 2;
}
return (int)i;
}
}