Given a positive integer num, write a function which returns True if num is a perfect square else False.
Note: Do not use any built-in library function such as sqrt.
Example 1:
Input: 16
Output: true
Example 2:
Input: 14
Output: false
题意
- 判断指定的数是否是平方数
思路1
- 无需全部判断,可以直接退出
- 中间计算
i * i可能溢出,使用long long强转
代码1
class Solution {
public:
bool isPerfectSquare(int num) {
for(int i = 1; i <= num / 2 + 1; i++)
{
if((long long)i * i > num)
break;
if(i * i == num)
return true;
}
return false;
}
};
思路2
- 二分查找标准写法
- 注意别越界
class Solution {
public:
bool isPerfectSquare(int num) {
int l = 1, r = num;
while(l < r)
{
int mid = (r - l) / 2 + l;
if((long long)mid * mid >= num) // 防止溢出
r = mid;
else
l = mid + 1;
}
if((long long)l * l == num)
return true;
else
return false;
}
};
本文介绍两种判断一个整数是否为完全平方数的方法:遍历法和二分查找法。无需使用内置sqrt函数,通过中间计算避免溢出,实现高效判断。
526

被折叠的 条评论
为什么被折叠?



