1. 题目解析
Leetcode链接:367. 有效的完全平方数
这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。
核心在于判断给定的整数是否可以开方成两个整数相乘,可以就返回false,反之返回true。
2. 算法原理
为了判断一个正整数num
是否为完全平方数,我们可以采用二分查找的方法。算法思路如下:
- 初始化左边界
left
为1,右边界right
为num
。 - 进入循环,当左边界小于等于右边界时执行以下步骤:
a. 计算中间值mid
,即left + (right - left) / 2
。
b. 计算mid
的平方,即mid * mid
。
c. 如果mid
的平方等于num
,则num
是完全平方数,返回true
。
d. 如果mid
的平方小于num
,则更新左边界left
为mid + 1
。
e. 如果mid
的平方大于num
,则更新右边界right
为mid - 1
。 - 如果循环结束后仍未找到完全平方数,则
num
不是完全平方数,返回false
。
3. 代码编写
class Solution {
public:
bool isPerfectSquare(int num) {
long long left = 0, right = num, mid = 0;
long long s;
while(left <= right)
{
mid = (left + right) / 2;
s = mid * mid;
if(s>num)
{
right = mid - 1;
}
else if(s<num)
{
left = mid + 1;
}
else
{
return true;
}
}
return false;
}
};
The Last
嗯,就是这样啦,文章到这里就结束啦,真心感谢你花时间来读。
觉得有点收获的话,不妨给我点个赞吧!
如果发现文章有啥漏洞或错误的地方,欢迎私信我或者在评论里提醒一声~