【LeetCode刷题】367. 有效的完全平方数

1:题目描述(力扣

给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。

进阶:不要 使用任何内置的库函数,如  sqrt 。

2:解题思路

完全平方数:如果一个自然数a是某一个整数b的平方,那么这个自然数a叫做完全平方数。零也可称为完全平方数。例如:16是4的平方,16就是一个完全平方数。

使用二分法解法:

第一步:确定左右边界,left,right=1,num/2+1,因为num为正整数,num的平方根一定落在区间[1,num/2+1]内,所以左右边界分别取1,num/2+1,而不是取0,num,这样可以缩小查询范围。

第二步:当left <= right时,进入循环,获取中间元素mid=(left+right)//2,当mid>num/mid,需要修改右边界值,right=mid-1,当mid<num/mid,需要修改左边界值,left=mid+1,当mid=num/mid,说明num是一个完全平方数,返回True。

第三步:在第二步中,没有找到一个符合的整数,则返回False

说明:为什么初始化right=num/2+1,而不是right=num/2

right=num/2,因为当num=1时,left=1,right=0.5,,left>right,会直接退出循环,导致出现1不是完全平方数的错误。

代码展示:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值