您的位置:首页 > 大数据 > 人工智能

38.leetCode 70. Climbing Stairs

2018-01-22 12:10 239 查看
【题目】:

You are climbing a stair case. It takes n steps to reach to the top.

Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?

Note: Given n will be a positive integer.
【分析】:共有n阶楼梯,每次可以爬1阶或2阶,问有多少种爬法?
1.递归:到达n的“前一步”走法可以是:从n-1处爬1阶楼梯,或者从n-2处爬2阶楼梯。那么递归表达式即写成
return
climbStairs(n - 1) + climbStairs(n - 2)
,递归结束条件为n=1或n=2。

【Python代码:超时】
def climbStairs(self, n):
"""
:type n: int
:rtype: int
"""
sum = 0
if n == 0:
return 0

if n == 1:
return 1

if n == 2:
return 2

sum = self.climbStairs(n-1) + self.climbStairs(n-2)
return sum


2. 递归方法会导致超时,爬楼梯的爬法数目符合斐波那契数列。首先考虑第一步的走法:第一步可以走1级台阶,也可以走2级台阶。那么,设S(n)表示走n级台阶的走法数量,如果第一步走1级台阶,剩下的台阶数为n-1,也就是说这种情况下的走法是相当于S(n-1);同理,如果第一步走2级台阶,剩下的台阶数为n-2,这样的走法相当于S(n-2);于是,得出递推公式:
S(n) = S(n-1)
+ S(n-2);
S(1) = 1, S(2) =2, S(3) =3,S(4)=5

【Python代码】:

def climbStairs(self, n):
"""
:type n: int
:rtype: int
"""
sum = 0
if n == 0:
return 0

if n == 1:
return 1

summ = 0
prev = 1
post = 1
i=1

while i < n:
summ = prev + post
prev = post
post = summ
i += 1

return summ
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: