码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode -- 爬楼梯(70)

时间:2020-04-05 13:40:48      阅读:63      评论:0      收藏:0      [点我收藏+]

标签:mamicode   tco   台阶   bsp   数列   楼梯   idt   两种方法   pow   

题目描述:假设你正在爬楼梯。需要 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)

标签:mamicode   tco   台阶   bsp   数列   楼梯   idt   两种方法   pow   

原文地址:https://www.cnblogs.com/shawn-young/p/12636600.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!