LeetCode 367. 有效的完全平方数

目录结构

1.题目

2.题解

2.1二分查找

2.2牛顿法


1.题目

给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。

说明:不要使用任何内置的库函数,如  sqrt

示例:

输入:16
输出:True


输入:14
输出:False

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-perfect-square
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2.题解

2.1二分查找

public class Solution367 {
    public boolean isPerfectSquare(int num) {
        if (num < 2) {
            return true;
        }
        long left = 2, right = num / 2, mid;
        while (left <= right) {
            mid = (right + left) / 2;
            if (mid * mid == num) {
                return true;
            }
            if (mid * mid > num) {
                right = mid - 1;
            } else {
                left = mid + 1;
            }
        }
        return false;
    }
}
  • 时间复杂度:O(logn)
  • 空间复杂度:O(1)

2.2牛顿法

问题等价于找f(x)=x ^{2} - num=0的根。注意溢出问题。

public class Solution367 {
    public boolean isPerfectSquare(int num) {
        if (num < 2) {
            return true;
        }
        long x = num / 2;
        while (x * x > num) {
            x = (x + num / x) / 2;
        }
        return x * x == num;
    }
}
  • 时间复杂度:O(logn)
  • 空间复杂度:O(1)

你可能感兴趣的:(LeetCode)