这个题解使用二分查找的方法来判断一个数是否为完全平方数。具体思路如下:
1. 如果给定的数num等于1,直接返回True,因为1是完全平方数。
2. 初始化左边界l为1,右边界r为num-1。
3. 当l<=r时,进行以下循环:
a. 计算中间值mid为(l+r)//2。
b. 如果num除以mid的结果等于mid,说明找到了完全平方数,返回True。
c. 如果num除以mid的结果小于mid,说明mid太大,将右边界r更新为mid-1。
d. 否则,num除以mid的结果大于mid,说明mid太小,将左边界l更新为mid+1。
4. 如果循环结束没有找到完全平方数,返回False。
时间复杂度: O(log n)
空间复杂度: O(1)
class Solution(object):
def isPerfectSquare(self, num):
if num == 1:
return True
# 初始化左右边界
l = 1
r = num-1
while l <= r:
# 计算中间值
mid = (l + r) // 2
# 判断 num/mid 是否等于 mid
if num / (mid * 1.0) == mid :
return True
# 如果 num/mid 小于 mid,说明 mid 太大,更新右边界
elif num / mid < mid:
r = mid - 1
# 如果 num/mid 大于 mid,说明 mid 太小,更新左边界
else:
l = mid + 1
# 循环结束没有找到完全平方数,返回 False
return False