面试题:判断一个数是否是完全平方数

判断一个数是否是完全平方数,方法有好几种,但是我们最常用的,就是对该数的一半的数做平方运算,运算结果和该数相同,就认为该数是完全平方数,但是该方法的时间复杂度不太友好:

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;
	}
发布了185 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_39309402/article/details/102719067