367.有效的完全平方数
给定一个正整数num ,编写一个函数,如果num是一个完全平方数,则返回true,否则返回false。
进阶:不要使用任何内置的库函数,如sqrt。
示例1
输入:num = 16
输出:true
示例2
输入:num = 14
输出:false
分析
num是正整数,所以如果num是一个完全平方数,那么在1-num的区间内存在一个数X,满足X² = num,且区间[1,X)内的任何数的平方都小于num,区间(x,num]内的任何数都大于num。
实现
class Solution {
public boolean isPerfectSquare(int num) {
int left = 0;
int right = num;
while(left < right) {
int mid = left + right >>> 1;
//转为long进行比较,int可能会溢出
long x = (long)mid * mid;
if(x < num) {
left = mid + 1;
}else {
right = mid;
}
}
return left * left == num;
}
}


Comments | NOTHING