您的位置:首页 > 其它

leetcode 69 - Sqrt(x)

2016-11-27 12:27 411 查看

leetcode题目汇集 —  Sqrt(x)


leetcode 69 - Sqrt(x)


题目要求:

Implement 
int sqrt(int x)
.

Compute and return the square root of x.


注意:程序中需要进行乘法计算,为避免数值逸出,中间数值应设置为long


解法1:从1开始遍历,直到root的平方大于x,此时返回结果。时间复杂度为o(n)

public class Solution {
public int mySqrt(int x) {
if (x < 0) {
return -1;
}
if (x == 0) {
return 0;
}
int root = 1;
long result = root * root;
while (result > 0 && result <= x) {
root++;
result = root * root;
}
return root - 1;
}
}



解法2:二分法,时间复杂度为o(log n)

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