一、题目描述
给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。
说明:不要使用任何内置的库函数,如 sqrt。
示例 1:
输入:16
输出:True
示例 2:
输入:14
输出:False
二、解题思路
解法一:递增判断
bool isPerfectSquare(int num) {
int i = 1;
while (pow(i, 2) < num) {
i++;
}
if (pow(i, 2) == num) return true;
else return false;
}
解法二:二分查找
bool isPerfectSquare(int num) {
int start = 1;
int end = num;
int mid = start + (end - start) / 2;
while (start <= end) {
if (pow(mid, 2) > num ) {
end = mid - 1;
} else if (pow(mid, 2) < num) {
start = mid + 1;
} else {
return true;
}
mid = start + (end - start) / 2;
}
return false;
}
解法三:公式法
即:完全平方数是前n个连续奇数的和
bool isPerfectSquare(int num) {
int i = 1;
while (num > 0) {
num -= i;
i += 2;
}
return num == 0;
}