题目描述
给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
示例 1:
示例 2:
提示:
1 <= num <= 231 - 1
思路
暴力循环
从 1 开始,算平方到 num,如果有则 true,否则 false
public boolean isPerfectSquare(int num) {for (int i = 0; i < num; i++) {if (Math.pow(i, 2) == num) {return true;}}return false;}
很自然,超时了
二分查找


public boolean isPerfectSquare(int num) {if (num < 2) {return true;}long left = 2, right = num / 2, x, guessSquared;while (left <= right) {x = left + (right - left) / 2;guessSquared = x * x;if (guessSquared == num) {return true;}if (guessSquared > num) {right = x - 1;} else {left = x + 1;}}return false;}
- 时间复杂度:O(logN)
- 空间复杂度:O(1)
牛顿迭代法(大概理解)


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)
哔哔一下
牛顿迭代。。第一次听,长见识了
