Implement int sqrt(int x).
Compute and return the square root of x, where x is guaranteed to be a non-negative integer.
Since the return type is an integer, the decimal digits are truncated and only the integer part of the result is returned.
Example 1:
Input: 4
Output: 2
Example 2:
Input: 8
Output: 2
Explanation: The square root of 8 is 2.82842..., and since
the decimal part is truncated, 2 is returned.
从1挨个看,直到 i * i > x 。 注意 i 应该为long,以免 i * i 超出整型范围。
时间复杂度O(根号N) ,因为不可能走完所有的N。 走到根号N 就找到答案了。
class Solution {
public int mySqrt(int x) {
long i = 1;
while (i * i <= x) {
i++;
}
return (int)(i - 1);
}
}
优化: 可以使用二分法:
class Solution {
public int mySqrt(int x) {
long start = 1;
long end = x;
while (start + 1 < end) {
long mid = start + (end - start) / 2;
if (mid * mid > x) {
end = mid;
} else if (mid * mid < x){
start = mid;
} else {
return (int)mid;
}
}
if (end * end <= x) {
return (int)end;
}
return (int)start;
}
}