题目在这​​:https://leetcode-cn.com/problems/valid-perfect-square/​

法一:

直接暴力循环。

完整代码

class Solution:
def isPerfectSquare(self, num: int) -> bool:


i = 0
while i * i <= num:
if i * i == num:
return True
i +=1
return False

法二:

使用二分法查找。
这里有个点,所给的数N为有效的完全平方数,则其一定是由一个不大于N/2的数平方而得到。比如 4 由2(不大于4/2) 的平方得到。16由4(不大于16/2)的平方得到。

所以右指针设置为 num//2+1 。

这里要加一的哈,比如 输入N=4,试一下就懂了。

完整代码

class Solution:
def isPerfectSquare(self, num: int) -> bool:
if num == 1:
return True
left = 0
right = num // 2 +1
while left < right:
mid = (left + right) // 2
if mid * mid > num:
right = mid
elif mid * mid < num:
left = mid +1
elif mid * mid == num:
return True
return False