LeetCode 367题:有效的完全平方数(Valid Perfect Square)
给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。
说明:不要使用任何内置的库函数,如 sqrt。
示例 1:
输入:16
输出:True
示例 2:
输入:14
输出:False
思路1:利用循环把所有平方数遍历一遍,每次发现这个平方数是给定数字的因子就把这个平方数除下去,直到商小于下一个平方数。
bool isPerfectSquare(int num){
long long int temp = 2;
bool isPS = false;
while(num >= temp*temp){
//如果平方数可以被整除就一直除尽它
//例如:给定数字144,可以分解为4*4*9,需要除两次4
while(num%(temp*temp) == 0){
num /= (temp*temp);
}
temp++;
}
//如果给定数字只有平方数的因子,它就是有效的完全平方数
if(num==1) isPS = true;
return isPS;
}
思路二:考虑等差数列 x = 2n - 1, n为正整数,它的前n项和是 n 2 . \ n^{2}\,. n2.
bool isPerfectSquare(int num){
for(int temp = 1;temp<=num; temp+=2) num -= temp;
return num ==0;
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-perfect-square
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。