写在前面
- 积累新的方式方法
- 脑子转不动了,扯皮扯的心好累,,,
题目详情
给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。
说明:不要使用任何内置的库函数,如 sqrt。
示例 1:
输入:16
输出:True
示例 2:
输入:14
输出:False
- 新增知识点
-
boolalpha 可以使用单词"true"和"false"进行输入/输出的布尔值.
-
boolalpha是头文件#include <iostream>中的一个函数,是把bool a = 1;
- 测试代码
#include <iostream>
using namespace std;
int main()
{
bool flag = 1;
// 输出值: 1
cout << flag << endl;
// 输出值: true
cout << boolalpha << flag << endl;
return 0;
}
ac代码
-
1. 二分法
class Solution {
public:
bool isPerfectSquare(int num)
{
long long left = 0,right = num;
long long squ, mid;
while (left <= right)
{
mid = (left + right) / 2;
squ = mid * mid;
if (squ == num)
return true;
else if (squ > num)
right = mid - 1;
else
left = mid + 1;
}
return false;
}
};
-
2. 局部迭代
- 通过调试了解代码运行状态
- 注意循环终止条件
class Solution {
public:
bool isPerfectSquare(int num) {
if(num == 1) return true;
for(long long i = 2; i*i <= num; i ++){
if(num%(i*i) == 0) {
num = num/(i*i);
i = 1;
}
}
if(num == 1) return true;
return false;
}
};
-
3. 普通解法
class Solution {
public:
bool isPerfectSquare(int num)
{
if(num == 1)
return true;
bool flag = false;
for(long long i = 2; i*i <= num; i ++)
{
if(i*i == num) {
flag = true;
break;
}
}
return flag;
}
};
- 测试运行
#include <iostream>
using namespace std;
bool isPerfectSquare(int num)
{
if(num == 1)
return true;
bool flag = false;
for(long long i = 2; i*i <= num; i ++)
{
if(i*i == num)
{
flag = true;
break;
}
}
return flag;
}
int main()
{
cout << boolalpha << isPerfectSquare(16);
return 0;
}
- 参考文章
- LeetCode 367. 有效的完全平方数
- LeetCode 367.有效的完全平方数(C++)