来源:力扣(LeetCode)
链接: https://leetcode.cn/problems/valid-perfect-square/
给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
进阶:不要 使用任何内置的库函数,如 sqrt 。
示例 1:
输入:num = 16
输出:true
示例 2:
输入:num = 14
输出:false
提示:

python实现
class Solution:
def isPerfectSquare(self, num: int) -> bool:
return sqrt(num) == int(sqrt(num))
c++实现
class Solution {
public:
bool isPerfectSquare(int num) {
return sqrt(num) == int(sqrt(num));
}
};
python实现
class Solution:
def isPerfectSquare(self, num: int) -> bool:
if num <= 1:
return True
for i in range(num//2+1):
if i * i == num:
return True
if i * i > num:
return False
return False
c++实现
class Solution {
public:
bool isPerfectSquare(int num) {
if (num <= 1) return true;
for(long i=2; i<num/2+1; i++) {
if (i*i == num) return true;
else if (i*i > num) return false;
}
return false;
}
};
复杂度分析
python实现
class Solution:
def isPerfectSquare(self, num: int) -> bool:
if num <= 1:
return True
left = 0
right = num // 2
while left <= right: # 注意这里是<=
mid = left + (right-left)//2
if mid * mid == num:
return True
elif mid * mid < num:
left = mid + 1
elif mid * mid > num:
right = mid - 1
return False
c++实现
class Solution {
public:
bool isPerfectSquare(int num) {
if (num <= 1) return true;
int left = 0;
int right = num/2;
while (left <= right) {
float mid = left + (right-left) / 2;
if (mid == num / mid) return true;
else if (mid > num/mid) right = mid - 1;
else if (mid < num/mid) left = mid+1;
}
return false;
}
};
复杂度分析
class Solution:
def isPerfectSquare(self, num: int) -> bool:
if num <= 1:
return True
x0 = num
while 1:
x1 = 1/2 * (x0 + num/x0)
if abs(x0-x1) < 1e-7:
break
x0 = x1
x0 = int(x1)
return x0*x0 == num
class Solution {
public:
bool isPerfectSquare(int num) {
if (num <= 1) return true;
float x0 = num;
while (1) {
int x1 = 0.5 * (x0 + num/x0);
if (x0-x1 < 1e-6)
break;
x0 = x1;
}
int x = (int) x0;
return x * x == num;
}
};
复杂度分析