题目:
Given a positive integer num, write a function which returns True if num is a perfect square else False.
Follow up: Do not use any built-in library function such as sqrt.
思路:
我是用的最笨的方法,实际上其背后蕴含着一个数学规律。
代码实现:
class Solution {
public:
bool isPerfectSquare(int num) {
long i = 1;
while (i*i < num){
++i;
}
return i*i == num;
}
};
discuss:
/*
discuss评论区解释:
This is a math problem:
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
....
so 1+3+...+(2n-1) = (2n-1 + 1)n/2 = nn
*/
// 思路:根据上述规律,一个一个地把所有奇数减掉,看是否正好为0。
class Solution {
public:
bool isPerfectSquare(int num) {
int i = 1;
while (num > 0){
num -= i;
i += 2;
}
return num == 0;
}
};