解法和69题很像。
二分法:
class Solution:
def isPerfectSquare(self, num: int) -> bool:
right = num // 2 +1
left = 1
if num == 1:
return True
while left < right:
mid = (left + right) >> 1
if mid**2 < num:
left = mid + 1
elif mid**2 > num:
right = mid
else:
return True
return False
牛顿迭代法
class Solution:
def isPerfectSquare(self, num: int) -> bool:
if num <=1:
return True
i = num/2
while i** 2 > num:
i = ( i + num / i) //2 # 这里必须是整除
return i**2 == num