LeetCode——367. 有效的完全平方数(Java)

题目描述

题干:
给定一个 正整数 num ,编写一个函数
如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
进阶:不要 使用任何内置的库函数,如  sqrt 。

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

示例 2:
输入:num = 14
输出:false

题解思路

返回该数字是否为完全平方数,当然Math内置方法直接就可以判断

如果不用库函数,我们可以从1开始求平方来计算判断是否为完全平方数

我们可以用万能二分来优化过程,官方还给出了牛顿迭代法,可以研究研究

正确代码

    // 内置方法
    public boolean isPerfectSquare(int num) {
        int x = (int) Math.sqrt(num);
        return Math.pow(x, 2) == num;
    }

    // 暴力
    public boolean isPerfectSquare01(int num) {
        long x = 1, sequare = 1;
        while (sequare <= num) {
            if (sequare == num) {
                return true;
            }
            ++x;
            sequare = (long) Math.pow(x, 2);
        }
        return false;
    }

    // 二分查找法
    public boolean isPerfectSquare02(int num) {
        int left = 0, right = num;
        while (left <= right) {
            int mid = left + (right - left) / 2;
            long seq = (long) Math.pow(mid, 2);
            if (seq < num) {
                left = mid + 1;
            } else if (seq > num) {
                right = mid - 1;
            } else {
                return true;
            }
        }
        return false;
    }

总结

这里只需要注意一些类型的转换,和要注意有些数字平方可能会超出int范围即可

如果文章存在问题或者有更好的题解,欢迎在评论区斧正和评论,各自努力,最高处见
posted @ 2021-11-04 09:00  21岁还不是架构师  阅读(63)  评论(0编辑  收藏  举报