0

几个月前,我用一种效率极低的算法解决了 Project Euler 的问题 67。今天,我意识到如何才能做得更好,在尝试制作更高效的算法时,我遇到了一些问题。

代码是这样的:

r_prev = [59,0,0]
r_load = [73,41,0]
r = [0,0,0]
zero_r = [0,0,0]
rows = 3
while rows != 0:
    position = 0
    for x in r_load:
        try:
            if r_prev[position] > r_prev[position-1]:
                r[position] = r_prev[position] + r_load[position]
            else:
                r[position] = r_prev[position-1] + r_load[position]
        except IndexError:
            r[position] = r_prev[position] + r_load[position]
        position += 1
    print r
    rows -= 1
    r_load = input("Enter next row")
    r_prev = r
    r_prev.append(0)
    zero_r.append(0)
    r = zero_r

它的工作原理是只保留到达某一点的最高路径的总和。此时我正在手动输入它(通过控制台)。当输入第一行时,它按预期执行,但是当输入第二行时,它认为r_prevandr是同一件事,并且执行的每个操作r_prev也会执行 on r

我该如何解决这个问题?

4

1 回答 1

4

当你这样做时,r_prev = r你不是在复制列表。您为同一个列表提供了一个额外的名称。要制作副本,请执行r_prev = list(r).

于 2012-08-20T02:02:51.230 回答