367.有效地完全平方数
目录
- 题目
- 解法
- 解法二
- 问题
题目
给你一个正整数 num 。如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
完全平方数 是一个可以写成某个整数的平方的整数。换句话说,它可以写成某个整数和自身的乘积。
不能使用任何内置的库函数,如 sqrt 。
解法
class Solution {
public:
bool isPerfectSquare(int num) {
int left = 0, right = num;
while (left <= right) {
int mid = (right - left) / 2 + left;
long square = (long) mid * mid;
if (square < num) {
left = mid + 1;
} else if (square > num) {
right = mid - 1;
} else {
return true;
}
}
return false;
}
};
解法二
掌握常见数列的特性,也能帮助解题
完全平方数的特性:每个完全平方数都可以表示为从 1 开始的连续奇数之和
var isPerfectSquare = function(num) {
if (num < 0) {
return false;
}
let i = 1;
while (num > 0) {
num -= i;
i += 2;
}
return num === 0;
};
问题
有一个用例容易得到内存溢出的问题
需要用long类型,并把int类型强转