367.有效的完全平方数
题目描述
题目链接:题目地址
给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
进阶:不要 使用任何内置的库函数,如 sqrt 。
输入:num = 16
输出:true
输入:num = 14
输出:false
思路分析
之前我们做过了一些有序不重复数组,找有序数组的下标,查找有序数组的索引位置,找出给定数的平方根的结果,找有效的完全平方数,这些题目的共同解法就是二分算法,二分算法的核心就是要知道两个边界的限定条件,同时知道mid值的最终输出是对应于原先数组的具体哪个位置以及循环结束时候左右下标是啥样的。这种类型也可以考虑暴力求解,但是暴力求解不是超显存就是超内存,不建议暴力求解,除非真找不到解法。
本题暴力求解超显存。
代码如下:
class Solution(object):
def isPerfectSquare(self, num):
"""
:type num: int
:rtype: bool
"""
if (num == 0 or num == 1):
return True
l = 0
r = num // 2
while (l <= r):
mid = l + (r - l)//2
if (mid*mid < num):
l = mid + 1
elif (mid*mid > num):
r = mid - 1
elif (mid*mid == num):
return True
return False
结果如下:
参考:
https://leetcode-cn.com/problems/valid-perfect-square/
代码随想录