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
Output: true

分析:

判断一个数是不是有效的完全平方数,不能使用类似于sqrt已有的库函数。可以用二分法,先判断n的一半的平方是不是与之相等,若是,直接返回true,若比n小,则将左指针等于mid+1,否则令右指针等于mid-1。若最后left大于right,还没有找到n的正平方根,则返回false。

class Solution {
public:
    bool isPerfectSquare(int num) {
        if(num <= 0)
            return false;
        int left = 0;
        int right = num;
        while(left <= right)
        {
            long mid = left + (right-left)/2;
            if(mid*mid == num)
                return true;
            else if(mid*mid < num)
                left = mid+1;
            else
                right = mid-1;
        }
        return false;
    }
};

 

收藏 打印