解题代码:
classSolution {
public:
bool isPerfectSquare(int num) {
if(num<=0)
return false;
while(num%2==0){
if(num%4!=0)
return false;
else
num/=4;
}
num--;
if(num%4!=0)
return false;
num/=4;
for(int i=0;i<=num/2;i++){
if(i*(i+1)==num)
return true;
}
return false;
}
};
解题思路:
题目要求判断出给出的数是否完全平方。从完全平方的特性切入,首先,对于一个数为完全平方,它必然可以表示为(2n+1)2或者(2n)2,分别对应奇数和偶数,因此,对于偶数,它必然可以被4整除,且它除以4之后的结果依然是一个完全平方。所以,只要一直除以4,必然可以得到一个奇数的完全平方,而若一个偶数不能被4整除,它必然不是完全平方。而对于奇数,由于可以分解成4n2+4n+1,因此,它减一后必然能被4整除,若不能则表示它不是完全平方。而减一除以四之后,得到n2+n,也就是n*(n+1),即它等于某两个连续的整数的积。根据以上的条件,即可判断一个数是否完全平方。