letecode [367] - Valid Perfect Square

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

Example 2:

Input: 14
Output: false

题目大意

  给定一个正整数,判断其是否为某个数的完全平方数。

理  解:

  用二分法。左初始化值为1,右初始值为num。将中间值的平方mid*mid与num比较:

    若 num/mid > mid,说明mid需要更大,更新left = mid +1;

    若 num/mid < mid,说明mid需要更小,更新right = mid -1;

    若  num/mid = mid,则判断num%mid是否为0,是则说明num为mid的完全平方数,否则不是。

代 码 C++:

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

运行结果:

  执行用时 :0 ms, 在所有 C++ 提交中击败了100.00%的用户

  内存消耗 :8.2 MB, 在所有 C++ 提交中击败了5.35%的用户

猜你喜欢

转载自www.cnblogs.com/lpomeloz/p/11050776.html