367. 有效的完全平方数
给定一个 正整数 num
,编写一个函数,如果 num
是一个完全平方数,则返回 true
,否则返回 false
。
进阶:不要 使用任何内置的库函数,如 sqrt
。
示例 1:
输入:num = 16
输出:true
示例 2:
输入:num = 14
输出:false
提示:
1 <= num <= 2^31 - 1
题解:
直接法:超时了…
//直接法:超时了
public boolean isPerfectSquare(int num) {
if(num == 1) return true;
int q = 1;
while(q <= num / 2) {
if(q * q == num) {
return true;
}
++q;
}
return false;
}
二分法:
//二分法进行求解
public boolean isPerfectSquare(int num) {
int left = 1;
int right = num;
while(left <= right) {
int number = (left + right) / 2;
//因为可能number*number的结果会超过num,即可能超过int类型的最大值,故这里我们将其转成long类型
if((long)number * number == num) {
return true;
}else if((long)number * number > num) {
right = number - 1;
}else {
left = number + 1;
}
}
return false;
}