Leetcode:367 Valid Perfect Square(是否为平方数)

来源:互联网 发布:递归算法棋子移动java 编辑:程序博客网 时间:2024/06/05 23:39

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: 16
Returns: True
Example 2:

Input: 14
Returns: False

注意审题:以前做过是否为2的平方数,我记得解法是如下,直接统计1的个数。

//如果是2的某次方的值,那么肯定二进制中的数字就只有一个,        /*审题错误不一定是二的某次方         * int cou = Integer.bitCount(num);        if (cou==1) {            return true;        }        return false;*/

接下来我的AC答案其实很容易想到:

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

但是速度是相当的慢;Just beats 2.04%

之后看了别人的答案,时间复杂度为logn
public boolean isPerfectSquare(int num) {

      int low = 1, high = num;    while (low <= high) {        int mid = (low + high) /2;        if (mid * mid == num) {            return true;        } else if (mid * mid < num) {            low = (int) mid + 1;        } else {            high = (int) mid - 1;        }    }    return false;}
原创粉丝点击