题目:

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

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

 

示例 1:

输入:num = 16
输出:true
示例 2:

输入:num = 14
输出:false
 

提示:

1 <= num <= 2^31 - 1

 

思路:

1、首先明确返回的是布尔值,倘若是一个完全平方数即为true;否则就为false

2、其次如何判断输入的数据是否为完全平方数呢?可以通过Math.sqrt()方法对输入的数据进行开方后再平方得到的数据与输入的数据进行对比,倘若相等则为完全平方数

  Math.sqrt();返回正确舍入的一个double值的正平方根。

  如果参数是NaN(非数)或小于为零,那么结果是NaN.

  如果参数是正无穷大,那么结果为正无穷大.

  如果参数是正零或负零,那么结果是一样的参数.

3、再次进阶版本,不使用sqrt方法的话,我们可以通过二分法找到一个数的平方为输入数据,则该数据为完全平方数

 

代码实现:

第一种方法:

class Solution {
    public boolean isPerfectSquare(int num) {
    int a=(int)Math.sqrt(num);
    long b=a*a;
    if(b==num){
        return true;
    }
  return false;
   }
}
第二种方法:
class Solution {
    public boolean isPerfectSquare(int num) {
    int start=0;int end=num;
    while(start<=end){
        int mid=(end-start)/2+start;
        long ans=(long)mid*mid;
        if(ans<num){
            start=mid+1;
        }else if(ans>num){
            end=mid-1;
        }else{
            return true;
        }
    }
    return false;
    }
}
posted on 2021-11-04 15:05  陈诺252  阅读(32)  评论(0)    收藏  举报