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阶楼梯。那么递归表达式即写成
【Python代码:超时】
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
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
相关文章推荐
- leetcode 70. Climbing Stairs
- 【LeetCode】70. Climbing Stairs
- 70. Climbing Stairs
- 70. Climbing Stairs
- leetcode之70. Climbing Stairs(C++解法 动态规划思想)
- leetcode_70. Climbing Stairs 爬楼梯,非递归算法
- 70. Climbing Stairs
- 70. Climbing Stairs
- [leetcode]70. Climbing Stairs(Java)
- 70. Climbing Stairs
- LeetCode 70. Climbing Stairs
- leetcode 70. Climbing Stairs
- Leetcode:70. Climbing Stairs
- Leetcode Algorithms - Dynamic Programming:70. Climbing Stairs
- LeetCode 70. Climbing Stairs(爬梯子)
- 70. Climbing Stairs
- 70. Climbing Stairs
- 70. Climbing Stairs
- [Leetcode]70. Climbing Stairs
- leetcode 70. Climbing Stairs