您的位置:首页 > 其它

LeetCode 069 Sqrt(x)

2016-07-08 23:06 309 查看
题目要求实现一个
int sqrt(int x)


由于输入输出都是int,最简单的方法就是从1开始递增枚举,如果平方大于x就停下来。但是太耗时了。我们可以用二分法枚举,实现上就是从大到小枚举每个二进制位是否为1。先找到满足
(2^n)^2<=x
的最大n。然后从最高位到最低位判断
2^n
中的n-1个二进制位是否能为1。

代码:

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