题解 | #杨辉三角的变形#
杨辉三角的变形
http://www.nowcoder.com/practice/8ef655edf42d4e08b44be4d777edbf43
# 非找规律,非构建完整杨辉三角 直接构建杨辉三角,如果有一百万行,会时间超限制。只构建杨辉三角的前4个数会内存超限制。 所以采用递推出前4项的数列递推公式。 当n>=3时候: dp = [1,n-1,n*(n-1)/2,(n*(n+1)(2n+1)/6+n*(n+1)/2-2*n)/2] 其中: 第一项恒为1; 第二项是等差数列,直接用求和公式; 第三项为An = An-1 + n-1 + 1 (n和n-1是下标),用高中学的逐差法求An即可; 第四项同理。
完整代码:
def is_odd():
for i in dp:
if i%2 == 0:
return dp.index(i)+1
return -1
n=int(input())
if n == 1:
dp = [1]
elif n == 2:
dp = [1,1,1]
elif n == 3:
dp = [1, 2, 3, 2, 1]
else:
dp = [1,n-1,n*(n-1)/2,(n*(n+1)*(2*n+1)/6+n*(n+1)/2-2*n)/2]
print(is_odd())