题目链接:https://leetcode-cn.com/problems/valid-perfect-square/
题目:
给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
示例1:
输入:num = 16
输出:true
示例2:
输入:num = 14
输出:false
思路和算法:
这里采用二分查找的方法。如果一个数是完全平方数,即mid * mid = num,那么一定有 1 <= mid <= num。我们可以将 1 和 num 作为二分查找搜索区间的初始边界。
代码(C++):
class Solution {
public:
bool isPerfectSquare(int num) {
int left = 0;
int right = num;
while (left <= right) {
int mid = left + (right - left) / 2; //防溢出,和int mid = (right + left) / 2;等效
long tmp_value = (long)mid * mid; //这里必须强制转换
if (tmp_value > num) {
right = mid - 1;
}
else if (tmp_value == num) {
return true;
}
else {
left = mid + 1;
}
}
return false;
}
};