题目描述:
给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
进阶:不要 使用任何内置的库函数,如 sqrt 。
1 <= num <= 2^31 - 1
示例:
输入:num = 16 输出:true
输入:num = 14 输出:false
思路:
二分法:
考虑使用二分查找来优化方法二中的搜索过程。将0-num作为查找区间,将区间逐渐一分为二来进行查找,减少时间复杂度。
代码:
class Solution:
def isPerfectSquare(self, num: int) -> bool:
left, right = 0, num
while left <= right:
mid = (left+right)//2
sqrt = mid*mid
if sqrt < num:
left = mid + 1
elif sqrt > num:
right = mid - 1
else:
return True
return False