我正在解决破解编码面试的问题:
一个孩子在n级台阶上跑步,可以一步跳一步,两步或三步。 实施一种方法来计算孩子爬楼梯的可能方式。 我想出了一个动态的解决方案:
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
有人能指出我正确的方向吗?
答案 0 :(得分:1)
关键问题是store_values[3]
的初始值是错误的。从3个步骤开始,您有4
种可能性:
3 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