有效的完全平方数
题目描述
给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。
说明:不要使用任何内置的库函数,如 sqrt。
示例 1:
输入:16
输出:True
示例 2:
输入:14
输出:False
解题思路:
- 暴力查找
class Solution {
public:
bool isPerfectSquare(int num) {
for(long long i=1;i*i<=num;i++)
{
if(i*i==num)
return true;
}
return false;
}
};
2.二分查找
class Solution {
public:
bool isPerfectSquare(int num) {
long long lef=0,rig=num;
while(lef<=rig)
{
long long mid=(lef+rig)>>1;
if(mid*mid>num)
rig=mid-1;
else if(mid*mid<num)
lef=mid+1;
else
return true;
}
return false;
}
};
3.牛顿迭代法
f(x) = x*x - num
f’(x) = 2x
求导数,然后求与x轴的交点,一步步逼近零点
LeetCode官方题解
class Solution {
public:
bool isPerfectSquare(int num) {
if(num==1)
return true;
long long x=num/2;
while(x*x>=num)
{
if(x*x==num)
return true;
x=(x+num/x)/2;
}
return false;
}
};