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
相关推荐
CoderCodingNo35 分钟前
【NOIP】2011真题解析 luogu-P1003 铺地毯 | GESP三、四级以上可练习
算法
iFlyCai1 小时前
C语言中的指针
c语言·数据结构·算法
查古穆1 小时前
栈-有效的括号
java·数据结构·算法
再一次等风来1 小时前
近场声全息(NAH)仿真实现:从阵列实值信号到波数域重建
算法·matlab·信号处理·近场声全息·nah
汀、人工智能1 小时前
16 - 高级特性
数据结构·算法·数据库架构·图论·16 - 高级特性
大熊背1 小时前
利用ISP离线模式进行分块LSC校正的方法
人工智能·算法·机器学习
XWalnut2 小时前
LeetCode刷题 day4
算法·leetcode·职场和发展
蒸汽求职2 小时前
机器人软件工程(Robotics SDE):特斯拉Optimus落地引发的嵌入式C++与感知算法人才抢夺战
大数据·c++·算法·职场和发展·机器人·求职招聘·ai-native
AI成长日志2 小时前
【笔面试算法学习专栏】双指针专题·简单难度两题精讲:167.两数之和II、283.移动零
学习·算法·面试
旖-旎3 小时前
分治(库存管理|||)(4)
c++·算法·leetcode·排序算法·快速选择算法