classSolution:defisPerfectSquare(self, num:int)->bool:
s =0for i inrange(1,num):
s = s +2* i -1if s > num:returnFalseif s == num:returnTrue# 执行用时 :60 ms, 在所有 Python3 提交中击败了46.88%的用户# 内存消耗 :12.9 MB, 在所有 Python3 提交中击败了99.62%的用户
算法说明: 由于,完全平方数,一定是前n个奇数的和,等差数列
a
1
,
a
2
,
…
a
n
a_1,a_2,…a_n
a1,a2,…an的和为
1
2
n
(
a
1
+
a
n
)
\frac{1}{2}n(a_1+a_n)
21n(a1+an),所以
1
+
3
+
…
+
2
n
−
1
=
1
2
n
(
1
+
2
n
−
1
)
=
n
2
1+3+…+2n-1=\frac{1}{2}n(1+2n-1)=n^2
1+3+…+2n−1=21n(1+2n−1)=n2 ,故用前n个奇数和来判断是否为完全平方数。