友情支持

如果您觉得这个笔记对您有所帮助,看在D瓜哥码这么多字的辛苦上,请友情支持一下,D瓜哥感激不尽,😜

支付宝

微信

有些打赏的朋友希望可以加个好友,欢迎关注D 瓜哥的微信公众号,这样就可以通过公众号的回复直接给我发信息。

wx jikerizhi

公众号的微信号是: jikerizhi因为众所周知的原因,有时图片加载不出来。 如果图片加载不出来可以直接通过搜索微信号来查找我的公众号。

367. 有效的完全平方数

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

完全平方数 是一个可以写成某个整数的平方的整数。换句话说,它可以写成某个整数和自身的乘积。

不能使用任何内置的库函数,如 sqrt

示例 1:

输入:num = 16
输出:true
解释:返回 true ,因为 4 * 4 = 16 且 4 是一个整数。

示例 2:

输入:num = 14
输出:false
解释:返回 false ,因为 3.742 * 3.742 = 14 但 3.742 不是一个整数。

提示:

  • 1 <= num <= 231 - 1

思路分析

二分查找。需要注意溢出的情况。

  • 一刷

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
 * @author D瓜哥 · https://www.diguage.com
 * @since 2025-07-20 22:20:06
 */
public boolean isPerfectSquare(int num) {
  if (num <= 0) {
    return false;
  }
  if (num == 1) {
    return true;
  }
  int left = 1, right = num / 2;
  while (left <= right) {
    int mid = left + (right - left) / 2;
    long pow = ((long) mid) * mid;
    if (pow == num) {
      return true;
    } else if (pow > num) {
      right = mid - 1;
    } else {
      left = mid;
    }
  }
  return false;
}