题目链接
题目描述
给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
进阶:不要 使用任何内置的库函数,如 sqrt 。
示例
示例1:
输入:num = 16 输出:true
提示
-
思路
思路1:二分查找
思路2:牛顿法
详细请看0069-x的平方根
题解
思路1:二分查找
class Solution {public:bool isPerfectSquare(int num) {if (num < 2) {return true;}int left = 0, right = num / 2;while (left <= right) {int mid = ((right - left) >> 1) + left;long long square = (long long)mid * mid;if (square == num) {return true;} else if (square > num) {right = mid - 1;} else {left = mid + 1;}}return false;}};
思路2:牛顿法
class Solution { public: bool isPerfectSquare(int num) { if (num < 2) { return true; } long i = num; while (i * i > num) { i = (i + num / i) / 2; } return i * i == num; } };复杂度分析
思路1:二分查找
时间复杂度:
-
思路2:牛顿法
时间复杂度:
- 空间复杂度:
