1. 题目
假设你正在爬楼梯。需要 n 步你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
2. 示例
示例 1:
输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1. 1 步 + 1 步 2. 2 步
示例 2:
输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶。 1. 1 步 + 1 步 + 1 步 2. 1 步 + 2 步 3. 2 步 + 1 步
3. 解答
python3
(1)思路:这个问题的解题思路和斐波那契数列数列是一样的。用递归实现会超出时间限制
class Solution(object): def climbStairs(self, n): """ :type n: int :rtype: int """ if n == 1: return 1 if n == 2: return 2 return self.climbStairs(n-1) + self.climbStairs(n-2) res = Solution().climbStairs(5) print(res)
(2)用循环代替递归
实现1:
class Solution(object): def climbStairs(self, n): t = [0]*(n+1) t[0] = 0 t[1] = 1 if n == 1: return t[1] ##### t[2] = 2 if n <= 2: return t[n] for i in range(3, n+1): t[i] = t[i-1] + t[i-2] return t[n]
实现2:
class Solution(object): def climbStairs(self, n): pre, cur = 0, 1 for i in range(n): pre, cur = cur, pre+cur return cur