给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。
说明:不要使用任何内置的库函数,如 sqrt
。
示例 1:
输入:16 输出:True
示例 2:
输入:14 输出:False
关键是大数的处理
mid * mid 可能会溢出,所以需要num / mid && mid * mid == num来判断是否是平方数
class Solution {
public:
bool isPerfectSquare(int num) {
if (num <= 0) {
return false;
}
if (num == 1) {
return true;
}
int first = 1, second = num / 2;
while (first <= second) {
int mid = first + (second - first) / 2;
int value = num / mid;
if (value > mid) {
first = mid + 1;
} else if (value < mid) {
second = mid - 1;
} else {
if (mid * mid == num) {
return true;
}
first = mid + 1;
}
}
return false;
}
};