【题目】
对非负数求平方根,不能调用系统自带库
Given a non-negative integer x
, compute and return the square root of x
.
Since the return type is an integer, the decimal digits are truncated, and only the integer part of the result is returned.
Note: You are not allowed to use any built-in exponent function or operator, such as pow(x, 0.5)
or x ** 0.5
.
Example 1:
Input: x = 4 Output: 2
Example 2:
Input: x = 8 Output: 2 Explanation: The square root of 8 is 2.82842..., and since the decimal part is truncated, 2 is returned.
【思路】
二分查找理解起来简单,但有很多易错点。
- 右边界要不要-1,循环时left<=right还是left<right 可以看这篇讲的很清楚 https://www.cnblogs.com/kyoner/p/11080078.html
- mid不能直接(L+R)/2,可能溢出,要写成 left+(right-left)/2 (JAVA和C++编程语言的bug,Python不会)
- 以及注意mid*mid=x和mid=x/mid,两者有区别!!/是向下取整,想不通就测试下2147395599
【代码】
class Solution { public int mySqrt(int x) { int left = 1, right = x; while (left <= right) { int mid =left+(right-left)/2; if (mid==x/mid) { return mid; } else if (mid<x/mid) { left = mid + 1; } else if(mid>x/mid) { right = mid - 1; } } return right; } }