给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
进阶:不要使用任何内置的库函数,如 sqrt 。
# 官方解答
class Solution:
def isPerfectSquare(self, num: int) -> bool:
left, right = 0, num
while left <= right: # 左指针小于等于右指针
mid = (left + right) // 2
square = mid * mid
if square < num:
left = mid + 1 #已经比较过mid*mid和num之间的大小关系了,因此从mid+1开始
elif square > num:
right = mid - 1 #已经比较过mid*mid和num的大小关系,right从mid-1开始
else:
return True
return False
if __name__ == '__main__':
num = 1
print(Solution.isPerfectSquare(Solution, num))
# 我的题解
class Solution:
def isPerfectSquare(self, num: int) -> bool:
if num == 1:
return True
ans = False
low, high = 0, num
while high > low: # 不严谨,low = high时,也可以
mid = int((high+low)/2)
if mid*mid > num:
high = mid # mid都比较过了,不应该再放在可选区间!
elif mid*mid < num:
low = mid
else:
ans = True
break
if mid == int((high+low)/2):
break
return ans