题目链接:力扣
题目:
给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
进阶:不要 使用任何内置的库函数,如??sqrt 。
示例 1:
输入:num = 16 输出:true
示例 2:
输入:num = 14 输出:false
提示:
1 <= num <= 2^31 - 1
解答:
【二分法查找——非递归】
1、判断边界值num=1的情况,返回是True
2、设置两个游标来记录每次二分的开始索引 left 和结束索引 right
2、循环求中间位置的值,并将这个值平方后与目标num进行比较,相等则返回,否则更新索引的值并进入下一次循环
3、若循环结束还是没找到相等,则返回False
完整代码如下:
class Solution:
def isPerfectSquare(self, num: int) -> bool:
if num==1:
return True
left,right = 1,num-1
while left<=right:
mid_index = (left+right)//2
if mid_index*mid_index==num:
return True
elif mid_index*mid_index>num:
right = mid_index - 1
else:
left = mid_index + 1
return False
提交结果:?
?
|