一开始的时候就是想直接写出来这个二维数组,然后找最后一行嘛,代码如下:

while True:
    n = int(input())

    lst = []
    lst.append([0] * (2*n-1))
    lst[0][n-1] = 1

    for line in range(1, n):
        new_line = []
        for j in range(2*n-1):
            if j == 0:
                new_line.append(0 + lst[line-1][j] + lst[line-1][j+1])
            elif j == 2*n-2:
                new_line.append(lst[line-1][j-1] + lst[line-1][j] + 0)
            else:
                new_line.append(lst[line-1][j-1] + lst[line-1][j] + lst[line-1][j+1])
        lst.append(new_line)
    # print(lst)
    line_n = lst[n-1]
    output = -1
    for num in range(len(line_n)):
        if line_n[num] % 2 == 0:
            output = num+1
            break
    print(output)

用这个去跑测试的时候发现会超时。仔细分析里面,两层大循环确实复杂度上去了。

然后看看有没有规律:

n out
1  -1
2  -1
3   2
        4   3
5   2
                6   4
7   2
        8   3
9   2
                10  4
11  2
        12  3
13  2
                14  4
15  2

这里用Tab给不同的答案分了一下,可以看出,1和2输出-1,奇数输出2,整除4输出3,余2输出4。那这就很简单了,判断n就可以:

n = int(input())

if n == 1 or n == 2:
    print(-1)
elif n % 2 == 1:
    print(2)
elif n % 4 == 0:
    print(3)
elif n % 4 == 2:
    print(4)