leetcode 367. 有效的完全平方数
给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
进阶:不要 使用任何内置的库函数,如 sqrt 。
示例 1:
输入:num = 16
输出:true
示例 2:
输入:num = 14
输出:false
提示:
1 <= num <= 2^31 - 1
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-perfect-square
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
采用二分法,判断某数的平方是否为目标数。值得注意的地方是,不能直接m * m > num可能会导致溢出,而使得m * m 为负数,需要用num / m < m判断。
public boolean isPerfectSquare(int num) { if (num < 4) { return num == 1 || num == 0; } int st = 0; int end = num >> 1; while (st <= end) { int m = st + ((end - st) >> 1); if (m * m == num) { return true; } if (num / m < m) { end = m - 1; } else { st = m + 1; } } return false; }
时间和空间中等。