代码之家  ›  专栏  ›  技术社区  ›  John Down

动态三N步长

  •  0
  • John Down  · 技术社区  · 8 年前

    我正在解决破解编码面试的问题:

    一个孩子跑上一个有n个台阶的楼梯,一次可以跳1步、2步或3步。 实施一种方法来计算孩子可以跑上楼梯的可能方式。

    def dynamic_prog(N):
        store_values = {1:1,2:2,3:3}
        return dynamic_prog_helper(N, store_values)
    
    def dynamic_prog_helper(N, map_n):
        if N in map_n:
            return map_n[N]
        map_n[N] =  dynamic_prog_helper(N-1, map_n) + dynamic_prog_helper(N-2, map_n) + dynamic_prog_helper(N-3,map_n)
        return map_n[N]
    

    我不知道为什么计算不正确。

    dynamic_prog(5) = 11, but should be 13
    dynamic_prog(4) =  6, but should be 7
    

    1 回复  |  直到 8 年前
        1
  •  1
  •   Prune    8 年前

    关键问题是您的初始值 store_values[3] 4

    2 1 1 2 1 1 1

    def dynamic_prog(N):
        store_values = {1:1,2:2,3:4}
        return dynamic_prog_helper(N, store_values)
    ...
    for stair_count in range(3, 6):
        print dynamic_prog(stair_count)
    

    输出:

    4
    7
    13