题目来源
题目描述
题目解析
思路
从1搜索到 sqrt(num),看有没有平方正好等于 num 的数:
class Solution {
public:
bool isPerfectSquare(int num) {
for (int i = 1; i <= num / i; ++i) {
if(i * i == num){
return true;
}
}
return false;
}
};
思路
也可以使用二分查找法来做,要查找的数为 mid*mid
class Solution {
public:
bool isPerfectSquare(int num) {
long left = 0, right = num;
while (left <= right) {
long mid = left + (right - left) / 2, t = mid * mid;
if (t == num) return true;
if (t < num) left = mid + 1;
else right = mid - 1;
}
return false;
}
};
数学性质
完全平方数是一系列奇数之和,例如:
1 = 1
4 = 1 + 3
9 = 1 + 3 + 5
16 = 1 + 3 + 5 + 7
25 = 1 + 3 + 5 + 7 + 9
36 = 1 + 3 + 5 + 7 + 9 + 11
....
1+3+...+(2n-1) = (2n-1 + 1)n/2 = n*n
可以写出如下代码:
class Solution {
public:
bool isPerfectSquare(int num) {
int i = 1;
while (num > 0){
num -= i;
i += 2;
}
return num == 0;
}
};