题解 | #跳台阶#
跳台阶
http://www.nowcoder.com/practice/8c82a5b80378478f9484d87d1c5f12a4
动态规划
-
第1个台阶dp[1]:1种跳法
-
第2个台阶dp[2]:2种跳法(1+1或2)
-
第3个台阶dp[3]:根据每次只能跳1步或2步,跳到第3个台阶可以拆分为:从第1个台阶跳2步上去,或者从第2个台阶跳1步上去,那么跳到第3个台阶方式数量,就转化为:跳到1个台阶方式数量+跳到第2个台阶的方式数量
-
...
-
同理,可得到递推公式:dp[n]=dp[n-1]+dp[n-2]
注:当number确定时,只需要知道number-1和number-2的跳法有多少种,因此不需要将整个过程都用数组存储下来,只需要用两个变量存储临近两个台阶跳法数量,并动态更新变量值即可。
#
# @param number int整型
# @return int整型
#
class Solution:
def jumpFloor(self , number: int) -> int:
# number<=2可直接返回结果
if number == 1: return 1
elif number == 2 : return 2
# number>2时,进行动态规划
dpStep1,dpStep2 = 1,2
target = 2
while target < number:
temp = dpStep1 + dpStep2
dpStep1 = dpStep2
dpStep2 = temp
target += 1
return dpStep2