题目:
假设有10阶楼梯,每次可以跨1阶或者2阶,请问走完10阶楼梯总共有多少种走法?
动态规划解法:
设定一个名为walk(num)的函数,其返回值为走n阶楼梯的走法,则问题为walk(10)
设想一下,我们走到最后一步的时候,只有两种可能的走法:
- 走一步,正好走完10阶楼梯,前面走路9阶楼梯
- 走两步,正好走完10阶楼梯,前面走了8阶楼梯
所以,走10阶楼梯的问题可以简化为,走9阶楼梯的走法,然后跨一步,走完。或者走8阶楼梯的走法 ,然后跨两步走完。
即walk(10)=walk(9)+walk(8)
那么走9阶楼梯总共有多少种走法呢?
分析过程一样,假设已经走到最后一步,只能有两种可能的走法:
- 走一步,正好走完9阶楼梯,前面走了8阶楼梯
- 走两步,正好走完9阶楼梯,前面走了7阶楼梯
即walk(9)=walk(8)+ walk(7)
……
到最后:
如果要走1阶楼梯,则只有一种走法:跨一步,即walk(1)=1
如果要走2阶楼梯,则有两种走法:一步一阶或者一阶两阶,即walk(2)=2
1 | package com.markey.test; |
运行效果如下: