题目:给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。进阶:不要 使用任何内置的库函数,如 sqrt 。
我本来写的代码如下:
class Solution {
public boolean isPerfectSquare(int num) {
boolean flag = false;
int l = 1;
int r = num;
while(l <= r){
int m = l + (r - l)/2;
if(m * m < num){
l = m +1;
}else if(m * m == num){
flag = true;
break;
}else{
r = m - 1;
}
}
return flag;
}
}
提交之后显示超出时间范围,大概因为当num足够大以后,m * m计算所需时间过高。改良版如下:
后来修改的代码如下:
class Solution {
public boolean isPerfectSquare(int num) {
boolean flag = false;
int l = 1;
int r = num;
while(l <= r){
int m = l + (r - l)/2;
int res = num / m;
if(res < m){
r = m - 1;
}else if(res > m){
l = m + 1 ;
}else{
if(num % res == 0){
flag = true;
}
l = m + 1 ;
}
}
return flag;
}
}