2018-09-30 15:42:49 +00:00
|
|
|
# [367. Valid Perfect Square](https://leetcode.com/problems/valid-perfect-square/description/)
|
|
|
|
# 思路
|
|
|
|
题目要求判断一个数是否是一个某个数的平方。要求不能调用库里的sqrt函数。
|
|
|
|
可以考虑二分搜索1到num/2范围的数mid, 判断mid的平方是否等于num。
|
|
|
|
注意:如果直接计算`if(mid * mid == num)` 会存在溢出的情况,所以应该`if(num % mid == 0 && num / mid == mid)`。
|
|
|
|
# C++
|
2019-09-13 15:08:41 +00:00
|
|
|
```C++
|
2018-09-30 15:42:49 +00:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
```
|