Skip to content

Latest commit

 

History

History
22 lines (22 loc) · 838 Bytes

367. Valid Perfect Square.md

File metadata and controls

22 lines (22 loc) · 838 Bytes

思路

题目要求判断一个数是否是一个某个数的平方。要求不能调用库里的sqrt函数。
可以考虑二分搜索1到num/2范围的数mid, 判断mid的平方是否等于num。
注意:如果直接计算if(mid * mid == num) 会存在溢出的情况,所以应该if(num % mid == 0 && num / mid == mid)

C++

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