给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
进阶:不要 使用任何内置的库函数,如 sqrt 。
解题思路:
完全平方指用一个整数乘以自己例如1*1,2*2,3*3等,依此类推。若一个数能表示成某个整数的平方的形式,则称这个数为完全平方数。完全平方数是非负数,而一个完全平方数的项有两个
- 从0-N,取中点
- 看中点的平方是否大于num
- 如果中点的平方小于num,需要找更大的数字,所以取右边,不需要保留这个数字,L = mid+1
- 如果大于或者等于,取左边,这个数字可能是也可能不是,需要保留这个数字,R = mid
class Solution {
public boolean isPerfectSquare(int num) {
if(num == 1) return true;
long s = 2;
long e = num/2;
while(s <= e){
long m = s+(e-s)/2;
long n = m*m;
if(n>num) e = m-1;
else if(n<num) s = m+1;
else return true;
}
return false;
}
}