leetcode367: Valid Perfect Square

来源:互联网 发布:第一次穿情趣内衣 知乎 编辑:程序博客网 时间:2024/05/12 11:11
要求:

Given a positive integer num, write a function which returns True if num is a perfect square else False.

Note: Do not use any built-in library function such as sqrt.

Example 1:

Input: 16Returns: True

Example 2:

Input: 14Returns: False
注意:写了三个版本,运行速度由慢到快。

直接暴力查找,在0-num/2找一个数使得k^2=num

public boolean isPerfectSquare(int num) {if (num == 1)return true;for (int i = 0; i <= num / 2; i++) {if (i * i == num)return true;}return false;}

后来发现并不是每个数字都要查找。观察平方数,可知平方数都是奇数列的部分和。只要判断num否是奇数之和就可以了

例如:

1=1

4=1+3

9=1+3+5

......

public boolean isPerfectSquare(int num) {for (int i = 1; num > 0; i += 2)num -= i;if (num == 0)return true;elsereturn false;}
最后一种方法是使用二分法查找,原理和第一种方法一样,只不过查找的过程快了很多

public boolean isPerfectSquare(int num) {long l = 1, h = num / 2;long x = num;if (x == 1 || x == 0)return true;while (l <= h) {long mid = l + (h - l) / 2;if (mid * mid > num)h = mid - 1;else if (mid * mid < num)l = mid + 1;elsereturn true;}return false;}




0 0
原创粉丝点击