您的位置:首页 > 其它

[Leetcode]sqrt(x)

2014-10-28 14:54 260 查看
牛顿迭代法:

Xi+1 = (Xi + n / Xi) / 2;

last代表Xi

res代表Xi+1

最终会收敛于last == res,得到的就是sqrt,具体原因wiki牛顿迭代法

public class Solution {
public int sqrt(int x) {
if (x == 0) return 0;

double last = 0; //任意
double res = 1; //任意
while (last != res) {
last = res;
res = (res + x / res) / 2;
}
return (int)res;
}
}


二分法,

由于一个数的算术平方根不会大于n/2+1,所以可以在0刀n/2+1之中用二分法查找。代码如下:

public int sqrt(int x) {
if(x<0) return -1;
if(x==0) return 0;
int l=1;
int r=x/2+1;
while(l<=r)
{
int m = (l+r)/2;
if(m<=x/m && x/(m+1)<m+1)
return m;
if(x/m<m)
{
r = m-1;
}
else
{
l = m+1;
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: