LeetCode第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 <= 2^31 - 1

问题分析

这题说的是判断一个数是否是完全平方数,并且不能使用内置的函数sqrt。我们知道计算一个数的平方根可以使用牛顿迭代法,这个之前讲过,就不在重复介绍。

我们来看另一种解决方式,根据下面的公式。

复制代码
(n+1)^2=n^2+2n+1

我们可以得出任何完全平方数都可以表示成:1+3+5+7+......,所以对于一个数我们从 1 开始减,然后是 3 ,接着是 5......,如果最后等于 0 ,说明它是完全平方数。

JAVA:

复制代码
// 任何数的平方都可以写成 1+3+5+7+...
public boolean isPerfectSquare(int num) {
    int i = 1;
    while (num > 0) {
        num -= i;
        i += 2;
    }
    return num == 0;
}

C++:

复制代码
public:
    bool isPerfectSquare(int num) {
        int i = 1;
        while (num > 0) {
            num -= i;
            i += 2;
        }
        return num == 0;
    }

Python:

复制代码
# 任何数的平方都可以写成 1+3+5+7+...
def isPerfectSquare(self, num: int) -> bool:
    i = 1
    while num > 0:
        num -= i
        i += 2
    return num == 0
相关推荐
垆边人似月.1 小时前
华为机试题 :字符串压缩
算法·华为
ggb喔1 小时前
52pojie 的图片工具:为什么无损转换后体积涨了 6 倍、照片方向还是歪的
图像处理·python·算法·计算机视觉·图形渲染·媒体
菜鸟~noob2331 小时前
【电子战】第25篇:自由空间、双射线与菲涅尔区【含matlab代码】
开发语言·算法·matlab
地平线开发者1 小时前
地平线征程6M YOLOv8s 部署
算法·自动驾驶
Run_Teenage1 小时前
算法:Manacher(马拉车)算法、中心扩展算法
算法
Tisfy2 小时前
LeetCode 0301.删除无效的括号:二进制枚举 / 回溯
算法·leetcode·字符串·题解·回溯·括号匹配·二进制枚举
Nil2082 小时前
leetcode 322零钱兑换
算法·leetcode·职场和发展
海绵宝宝转agent2 小时前
2026-10-9 leetcode100刷题+面经整理
笔记·算法·面试
yi0112 小时前
DAY24: LeetCode 167:两数之和 II|从暴力枚举到左右双指针
笔记·python·算法·leetcode·二分查找·双指针
木井巳2 小时前
【BFS 解决拓扑排序】课程表
java·算法·leetcode·广度优先·宽度优先·推荐算法·图搜索算法