Every day a leetcode
题目来源:367. 有效的完全平方数
解法1:用sqrt
代码:
bool isPerfectSquare(int num){
if((int)(sqrt(num))*sqrt(num) == num) return true;
else return false;
}
结果:
解法2:暴力
注意用long,int会爆。
代码:
bool isPerfectSquare(int num){
long x=1;
long n=1;
while(n<=num)
{
if(n == num) return true;
x++;
n=x*x;
}
return false;
}
结果:
解法3:二分搜索
代码:
bool isPerfectSquare(int num){
int left=1;
int right=num;
long mid;
while(left<=right)
{
mid=left+(right-left+1)/2;
long n=mid*mid;
if(n == num) return true;
else if(n<num) left=mid+1;
else right=mid-1;
}
return false;
}
结果:
解法4:数学
对于任一完全平方数,它可以展开为:
n^2 = 1+3+5+...+2*n-1
代码:
bool isPerfectSquare(int num){
int x=1;
while(num>0)
{
num-=x;
x+=2;
}
if(num == 0) return true;
else return false;
}
结果: