# 「力扣」第 367 题:有效的完全平方数(中等)

# 题目描述

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

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

示例 1:

输入:num = 16
输出:true

示例 2:

输入:num = 14
输出:false

提示:

# 思路分析

这是一个简单的问题,只存在一个正整数,它的平方为 num,因此使用「把区间分成三个部分」来解决。

参考代码

Java 代码:

public class Solution {

    public boolean isPerfectSquare(int num) {
        if (num < 2) {
            return true;
        }

        int left = 1;
        int right = num / 2;
        while (left <= right) {
            int mid = left + (right - left) / 2;
            if (num % mid == 0 && num / mid == mid) {
                return true;
            } else if (num / mid > mid) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        return false;
    }

}

Python 代码:

class Solution:
    def isPerfectSquare(self, num: int) -> bool:
        if num < 2:
            return True

        left = 1
        right = num / 2
        while left <= right:
            mid = left + (right - left) // 2
            if num % mid == 0 and num // mid == mid:
                return True
            elif num // mid > mid:
                left = mid + 1
            else:
                right = mid - 1
        return False

作者:liweiwei1419 链接:https://suanfa8.com/binary-search/solutions-2/0367-valid-perfect-square 来源:算法吧 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Last Updated: 11/18/2024, 11:23:03 PM