好笨的方法:
class Solution:
def mySqrt(self, x):
"""
:type x: int
:rtype: int
"""
if 0 < x and ( x == 1 or x == 0):
return x
if x == 2 or x == 3:
return 1
if x <= 7 and x >=4:
return 2
right = x //2
left = right//2
while (right - left >1):
if right**2 > x and left**2 > x :
left = left // 2
right = right // 2
elif left**2 < x and right**2 > x:
if ((right + left) // 2)**2 < x:
left = (right + left) // 2
else:
right = (right + left) // 2
elif left**2 == x:
return left
elif right**2 ==x :
return right
# print('left,right',left,right)
if right**2 == x:
return right
return left
引入一个mid,就变得好看多了:
class Solution:
def mySqrt(self, x):
"""
:type x: int
:rtype: int
"""
if x == 0:
return 0
left, right = 1, x
mid = 0
while (right - left) > 1:
mid = (left + right) // 2
if mid * mid > x:
right = mid
else:
left = mid
return left