给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
进阶:不要 使用任何内置的库函数,如 sqrt 。
输入:num = 16
输出:true
输入:num = 14
输出:false
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| /** * 由于是正整数,所以可以理解为是正有序的,使用二分法高效 * 完全平方数,可以理解为,能找到一个正整数,完全满足 N*N=num */ public boolean isPerfectSquare(int num) { int l = 0; int r = num; while (l <= r) { int mid = l + (r - l) / 2; long temp = (long) mid * mid; if (temp > num) { r = mid - 1; } else if (temp < num) { l = mid + 1; } else { return true; } } return false; }
|