最近在刷leetcode, 遇到一个很easy的问题,但是用蛮力的方法,根本解不开,想着应该是数学得某个知识,这个结介绍一下。
题目介绍
这个题目就是输入一个整数,来判断它是不是一个整数的平方,虽然可以用蛮力算法来解决,但是在提价的时候会遇到 Time Limit Exceed这个问题,所以常规的方法,不能做。
解题方法
所有的算法归结到底都是数学,既然这个题目看着简单,那么应该用到的数学也就不难,仔细发现,这个一个运用等差数列求和可以来解决的问题。那么是哪个数列的。数列的递推公式可以如下:
a
n
=
2
n
−
1
(
n
=
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
.
.
.
.
)
,
S
(
n
)
=
n
2
a_{n}= 2n-1(n=1,2,3,4,5,6,7,8,9,....) , S(n) = n^2
an=2n−1(n=1,2,3,4,5,6,7,8,9,....),S(n)=n2
也就是起始项是1,公差为2的等差数列,这个数列的前n项和就是n的平方。由此我们可以得出整个程序了,下面给出整个程序的Java版本的代码。
class Solution{
public static boolean ValidPerfectSquare(int number){
for(int i = 1;number > 0;){
number -= i;
i -= 2;
}
if(number == 0)
return true;
else{
return false;
}
}
}