Leetcode -- 爬楼梯(70)

Posted 神的孩子都在跳舞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode -- 爬楼梯(70)相关的知识,希望对你有一定的参考价值。

题目描述:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶?

 

思路:分为两种情况,最后一步爬1个台阶或者最后一步爬2个台阶,二者之和即为所有的可能的方法。首先想到了递归算法,很不幸的是当n=38时就已经超时了。另外两种方法,斐波拉契数列以及动态规划法。

思路一:动态规划法

初始化dp[0]=0,dp[1]=1.dp[n]=dp[n-1]+dp[n-2]

 1 class Solution:
 2     def climbStairs(self, n: int) -> int:
 3         if n == 1:
 4             return 1
 5         dp = [1,2]   #初始化
 6         for i in range(3,n+1):
 7             temp = dp[-1]+dp[-2]
 8             dp.append(temp)
 9             dp.pop(0)    #为了减少内存开销,使数组大小始终为2,故每次弹出栈顶元素
10         return dp[-1]

思路二:斐波拉契数列法。

  

 

 1 class Solution:
 2     def climbStairs(self, n: int) -> int:
 3         if n == 1 or n == 2:
 4             return n
 5         f_1 = 1
 6         f_2 = 2
 7         for i in range(3,n+1):
 8             f_n = f_1 + f_2
 9             f_1 = f_2
10             f_2 = f_n
11         return f_n
12 
13 #公式法
14 class Solution:
15     def climbStairs(self, n: int) -> int:
16         sqrt5 = math.sqrt(5)
17         fib = math.pow((1+sqrt5)/2,n+1)-math.pow((1-sqrt5)/2,n+1)
18         return int(fib/sqrt5)

 

以上是关于Leetcode -- 爬楼梯(70)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode70爬楼梯

LeetCode #70 爬楼梯

leetcode 70 爬楼梯

Leetcode#70. Climbing Stairs(爬楼梯)

LeetCode70.爬楼梯

「动态规划」LeetCode 70(爬楼梯)