一:题目
二:上码
class Solution {
public:
/**
完全平方数:若一个数能表示成某个整数的平方的形式,则称这个数为完全平方数
思路:1.我们将num先折半,因为它是某个整数的平方,而这个数的范围肯定不会超过num的一半
2.那么这就相当于在[left,num/2]中查找某个数,其的平方正好可以是num
*/
bool isPerfectSquare(int num) {
if(num == 1) return true;
int left = 0;
int right = num/2; //一个数的完全平方数是的平方根是不会超过num/2的一半的
while (left <= right) {
long mid = (right-left)/2 + left;
long square = mid * mid;
if(square < num) {//当平方小于num时候 我们需要在更大的范围内寻找mid
left = mid + 1;
} else if (square > num) {//当平方大于num的时候,我们需要更小的范围内寻找mid
right = mid - 1;
} else {
return true;
}
}
return false;
}
};