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
相关推荐
GuWenyue2 小时前
传统Agent工具两大痛点!300行代码落地MCP跨语言工具,彻底解耦LLM与工具
前端·人工智能·算法
我叫洋洋3 小时前
C ++ [ hello world ]
c语言·c++·算法
奋发向前wcx5 小时前
y1,y2总复习笔记5 2026.7.19
数据结构·笔记·算法
战族狼魂8 小时前
高频面试题精选:分治与AI Agent架构
人工智能·算法·大模型·大语言模型
李剑一8 小时前
你用过网易的将军令嘛?它底层实现账号保护的原理相当简单粗暴
算法
Scott9999HH8 小时前
告别流量波动玄学!从法拉第电磁定律到底层 C/C++ 流量累积算法,深度解密工业级电磁流量计选型与开发
c语言·c++·算法
中达瑞和-高光谱·多光谱9 小时前
1nm到8nm光谱分辨率,你的应用该选哪款光谱相机?
算法·高光谱·高光谱相机
香辣牛肉饭9 小时前
【算法】动态规划 最长公共子序列(LCS)
经验分享·笔记·算法·动态规划
旖-旎10 小时前
LeetCode 279:完全平方数(完全背包)—— 题解
c++·算法·leetcode·动态规划·背包问题