LeetCodeLeetCode367. 有效的完全平方数

文章介绍了如何判断一个正整数是否为完全平方数,提供了两种方法:直接开根号比较和使用二分查找。在二分查找中特别提到要注意数值溢出问题,并将中间结果转换为long类型。对于特殊情况num=1,需要单独处理。
摘要由CSDN通过智能技术生成

367. 有效的完全平方数 - 力扣(LeetCode)

Given a positive integer num, return true if num is a perfect square or false otherwise. A perfect square is an integer that is the square of an integer. In other words, it is the product of some integer in itself.

给你一个正整数 num 。如果 num 是一个完全平方数,则返回 true ,否则返回 false 。完全平方数 是一个可以写成某个整数的平方的整数。换句话说,它可以写成某个整数和自身的乘积。

//api方法
class Solution {
    public boolean isPerfectSquare(int num) {
        int x = (int) Math.sqrt(num);
        return x * x == num;
    }
}
//手撕
class Solution {
    public boolean isPerfectSquare(int num) {
        int left = 0;
        int right=num;
        if(num==1){
            return true;
        }
        while(left<=right){
            int mid =left+(right-left)/2;
            long dight = (long)mid*mid;//普通int接收可能会溢出
            if(dight==num){
                return true;
            }
            if(dight<num){
                left=mid+1;
            }else {
                right =mid-1;
            }
        }
        return false;
    }
}

点评:本题快速的解法就是直接对num开根号得数再通过平方的方式区分是否与本身相同的方法,我使用的是二分查找的方法也能较快的锁定到最小可能目标值,使用api的方法比较巧妙,二分查找相对普通,同时可以使用暴力解法但相对的耗时会更高。

特殊情况及注意点:在测试代码时会出现数值溢出的现象,因为当num很大时mid*mid可能会超出int类型的范围导致溢出,所以需要将其强转为数值范围更大的long类型,同时二分查找法对num=1难以辨别所以提取为特殊情况。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值