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类型强转