给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
进阶:不要 使用任何内置的库函数,如 sqrt 。
示例 1:
输入:num = 16
输出:true
示例 2:
输入:num = 14
输出:false
提示:1 <= num <= 2^31 - 1
解题思路
首先分析题目,平方根的寻找是从 (0, n),故可以采用二分模板,因为目标区域一定是在 0 的右侧,即位于右半边区间,所以使用 整数二分模板二。找到平方根后,使用 if 语句,平方后与num比较得出结果
C++ 代码实现
class Solution {
public:
bool isPerfectSquare(int num) {
int l = 0 , r = num;
while (l < r)
{
int mid = (l + r + 1ll) / 2;
if (mid <= num / mid ) l = mid;
else r = mid - 1;
}
if (l * l == num) return true;
else return false;
}
};
Java 代码实现
class Solution {
public boolean isPerfectSquare(int num) {
int l = 0, r = num;
while (l < r)
{
int mid = (l + r + 1) / 2;
if (mid <= num / mid) l = mid;
else r = mid - 1;
}
if (l * l == num) return true;
else return false;
}
}
JavaScript 代码实现
/**
* @param {number} num
* @return {boolean}
*/
var isPerfectSquare = function(num) {
let l = 0, r = num;
while (l < r)
{
let mid = l + r + 1 >> 1;
if (mid * mid <= num) l = mid;
else r = mid - 1;
}
if (l * l == num) return true;
else return false;
};