给定一个正整数,返回它是否是完美平方数的boolean值
不使用任何库函数 例如sqrt之类的
这里采用对半分割逼近num^0.5的方法
考虑到每次折叠搜索区间都是相似的结构不同的端点参数
这里使用递归简化代码
递归函数:输入搜索num^0.5的区间端点,输出boolean表示结果
这里要注意的是,int 类型做运算时如果运算结果超出int类型表示范围会得到负数
所以这里将一些运算结果定义为long类型
class Solution {
public boolean isPerfectSquare(int num) {
if(num == 1){return true;}
return splitAgain(0,num,num);
}
public boolean splitAgain(int lBoundary, int rBoundary, int num){
if(rBoundary - lBoundary <= 1){
return false;
}
int num1 = (lBoundary + rBoundary)/2;
long num1Square = (long)num1*num1;
if(num1Square > num){
return splitAgain(lBoundary, num1, num);
}else if(num1Square < num){
return splitAgain(num1, rBoundary, num);
}else if(num1Square == num){
return true;
}
return false;
}
}