- 这道题很适合用二分来解决,算是二门入门的一个练手题吧
- 思想就是首先设置两个指针,一个是0,一个是x,相当于在数轴上划定一个区域 [ 0 , x ]
- 然后计算数轴中间值和我们想要找的值的大小关系,因为数轴是有序的,如果中心小于等于我们要找的数,证明我们要找的数在右边区域且有可能是中心这个数,把左指针设置为中心,右指针不变;如果中心大于等于我们要找的数,证明我们要找的数在左边区域且没有可能是中心这个数,把右指针设置为中心减1,左指针不变
- 以此递归下去
class Solution(object):
def mySqrt(self, x):
"""
:type x: int
:rtype: int
"""
l = 0
r = x
if l == r :
return 0
while r - l > 1e-100 :
m = (l + r + 1) / 2
if m * m <= x :
l = m
else :
r = m - 1
return l