判断一个数是否是完全平方数,方法有好几种,但是我们最常用的,就是对该数的一半的数做平方运算,运算结果和该数相同,就认为该数是完全平方数,但是该方法的时间复杂度不太友好:
public static void main(String[] args) {
System.out.println(lowIsSquare(16));
}
/**
* num一半的整数做一次平方运算,如果某一个平方等于num就返回true
*
* @param num
* @return
*/
public static boolean lowIsSquare(int num) {
if (num < 0)
return false;
for (int i = 0; i <= num / 2; i++) {
if (i * i == num)
return true;
}
return false;
}
下面再介绍两种比较有创意的写法,如下:
public static void main(String[] args) {
System.out.println(isSquare(25)); // true
System.out.println(isPerfectSquare(16)); // true
}
/**
* 给num做开方运算判断,开方后的数字是整数则true
*
* @param num
* @return
*/
public static boolean isSquare(int num) {
double a = 0;
try {
a = Math.sqrt(num);
} catch (Exception e) {
return false;
}
int b = (int) a;
return a - b == 0;
}
/**
* n^2=1+3+5+……+2n-1 n个奇数(1,3,5,7,...)之和等于n的平方,其中n大于0 如果变成了负数,说明它不是平方数
*
* @param num
* @return
*/
public static boolean isPerfectSquare(int num) {
int i = 1;
while (num > 0) {
num -= i;
i += 2;
}
return num == 0;
}