leetcode笔记之[367. 有效的完全平方数]

141 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述:

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

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

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

 

示例 1:

输入:num = 16
输出:true

示例 2:

输入:num = 14
输出:false

提示:

  • 1 <= num <= 2^31 - 1

二、思路分析:

首先根据完全平方数的概念,x*x = num,所以x的取值范围为 1 <= x <= num 所以我们可以在区间1到num之间进行二分查找,在进行二分查找的过程中注意数据的溢出问题

三、AC 代码:

class Solution {
    public boolean isPerfectSquare(int num) {
        int l = 1; int r = num;
        while (l <= r) {
            int mid = l + (r - l) / 2;
            long square = (long) mid * mid;
            if (square == num) {
                return true;
            } else if (square > num) {
                r = mid - 1;
            } else if (square < num) {
                l = mid + 1;
            }
        }
        return false;
    }
}

四、总结:

官方还有个牛顿迭代法,听着很厉害的样子,目前还没有研究,下次再好好研究下,感兴趣的可以看下参考链接。

范文参考

双百牛顿法 - 有效的完全平方数 - 力扣(LeetCode) (leetcode-cn.com)

有效的完全平方数 - 有效的完全平方数 - 力扣(LeetCode) (leetcode-cn.com)

367. 有效的完全平方数(二分法) - 有效的完全平方数 - 力扣(LeetCode) (leetcode-cn.com)