我自己的解法,利用二分法:
bool isPerfectSquare(int num)
{
if(num == 1)
return true;
int start = 2;
int end = num;
int mid;
while(start <= end)
{
mid = start + (end - start)/2;
if(mid == num / mid && num % mid == 0)
return true;
if(mid > num / mid)
end = mid - 1;
else
start = mid + 1;
}
return false;
}
网上大佬的思路:利用平方数的性质
1=1,4=1+3,9=1+3+5,16=1+3+5+7以此类推,模仿它可以使用一个while循环,不断减去一个从1开始不断增大的奇数,若最终减成了0,说明是完全平方数,否则,不是。
bool isPerfectSquare(int num)
{
int num1 = 1;
while(num > 0)
{
num -= num1;
num1 += 2;
}
return num == 0;
}