难度:简单 力扣原题链接
给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
进阶:不要 使用任何内置的库函数,如 sqrt 。
示例 1:
输入:num = 16
输出:true
示例 2:输入:num = 14
输出:false提示:
1 <= num <= 2^31 - 1
难度:简单 运用方法:二分查找
思路
就是二分查找,别的还有例如:牛顿迭代法,但是没有二分查找感觉来的直接...
但是之所以想分享,有一个重要的点:
在第一个边写的时候,一直808201验证不过去,百思不得其解,最后sout发现!!!
原来是没有把mid * mid 相乘的结果转回为long!!!这个真的竟然出现了负值
最后通过输出,才意识到mid * mid 超出了int的范围,然后变为负值了,难怪一直过不去
真的这个很值得总结,真的会谢!!!
注意:以后要注意int的范围,避免这种出现负数的情况!!
代码
class Solution {
public boolean isPerfectSquare(int num) {
if(num == 0 || num == 1){
return true;
}
int left = 0;
int right = num/2;
while(left <= right){
int mid = left + ((right - left)/2);
long result = (long)mid*mid;
if (result == num) {
return true;
}
else if(result < num){
left = mid + 1;
}else{
right = mid - 1;
}
}
return false;
}
}
成果