题目描述
题干:
给定一个 正整数 num ,编写一个函数
如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
进阶:不要 使用任何内置的库函数,如 sqrt 。
示例 1:
输入:num = 16
输出:true
示例 2:
输入:num = 14
输出:false
题解思路
返回该数字是否为完全平方数,当然Math内置方法直接就可以判断
如果不用库函数,我们可以从1开始求平方来计算判断是否为完全平方数
我们可以用万能二分来优化过程,官方还给出了牛顿迭代法,可以研究研究
正确代码
// 内置方法
public boolean isPerfectSquare(int num) {
int x = (int) Math.sqrt(num);
return Math.pow(x, 2) == num;
}
// 暴力
public boolean isPerfectSquare01(int num) {
long x = 1, sequare = 1;
while (sequare <= num) {
if (sequare == num) {
return true;
}
++x;
sequare = (long) Math.pow(x, 2);
}
return false;
}
// 二分查找法
public boolean isPerfectSquare02(int num) {
int left = 0, right = num;
while (left <= right) {
int mid = left + (right - left) / 2;
long seq = (long) Math.pow(mid, 2);
if (seq < num) {
left = mid + 1;
} else if (seq > num) {
right = mid - 1;
} else {
return true;
}
}
return false;
}
总结
这里只需要注意一些类型的转换,和要注意有些数字平方可能会超出int范围即可
如果文章存在问题或者有更好的题解,欢迎在评论区斧正和评论,各自努力,最高处见