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.
<思路>尝试过for循环,超时了。所以用二分查找的方式,减少时间。
class Solution(object):
def mySqrt(self, x):
"""
:type x: int
:rtype: int
"""
left,right = 0,x #二分查找的左右边界
if 0<x<4: #0到4区间直接返回1,因为不适用二分查找
return 1
while True:
mid = (left+right)//2
mid2 = mid**2
if mid2 == x:
return mid
if mid2 > x:
right = mid-1
elif mid2 < x:
if (mid+1)**2 > x:
return mid
left = mid+1