假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
示例 1:
输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
- 1 阶 + 1 阶
- 2 阶
示例 2:
输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
- 1 阶 + 1 阶 + 1 阶
- 1 阶 + 2 阶
- 2 阶 + 1 阶
思路:
本题类似斐波那契数列。使用分而治之的方法进行处理。
输入n,假设有f(n)种走法,则根据第一步走一阶还是二阶,产生f(n-1)+f(n-2)种走法,即f(n)=f(n-1)+f(n-2),可见到其与斐波那契数列的类似。又有数列的前几项为[0,1,2,3,5]可据此写出代码。
代码:
class Solution:
def climbStairs(self, n):
"""
:type n: int
:rtype: int
"""
res=[0,1,2,3,5]
if n<=0:
return None
if n<=4:
return res[n]
else:
while n>4:
res.append(res[-1]+res[-2])
n-=1
return res[-1]
分析:
时间复杂度O(n),空间复杂度O(n)
击败83.18%的Python3提交记录