动态规划类题目
描述
假设你正在爬楼梯,需要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部?
您在真实的面试中是否遇到过这个题?
样例
Example 1:
Input: n = 3
Output: 3
Explanation:
1) 1, 1, 1
2) 1, 2
3) 2, 1
total 3.
Example 2:
Input: n = 1
Output: 1
Explanation:
only 1 way.
思路:上第I级台阶的方法总共有两大种,第一种是从第(i-1)级台阶上跨一级,第二种则是从第(I-2)级台阶上跨两级,除此并无他法,由于这个上楼方法从(i-1)和(i-2)级各只有一种方法,那么上第i级台阶的总的方法和数就是上前两级台阶的方法总和数
思路递归代码
class Solution:
"""
@param n: An integer
@return: An integer
"""
def climbStairs(self, n):
# write your code here
if n==0:
return 0
if n==1:
return 1
pre,ppre=1,1# pre,ppre前时刻,前2时刻
for i in range(2,n+1):
tmp = pre#tmp 用于pre ,与ppre 完成数值改变
pre = pre + ppre#当前等于前面两步相加
ppre = tmp#前一时刻变成前前时刻
return pre