1.题目描述:
假设你正在爬楼梯。需要 n
阶你才能到达楼顶。
每次你可以爬 1
或 2
个台阶。你有多少种不同的方法可以爬到楼顶呢
2.示例 :
输入:n = 2 输出:2 解释:有两种方法可以爬到楼顶。 1. 1 阶 + 1 阶 2. 2 阶
3.详细思路:
从个例推出通解:
n=1:走1步,有1种解法
n=2:可以走1+1步,也可以直接走2步,2种解法
n=3:可以走的方式有:1+1+1,1+2,2+1,共3种
n=4:走法有1+1+1+1,1+2+1,2+1+1,1+1+2,2+2,共5种
n=5:走法有1+1+1+1+1,1+1+1+2,1+1+2+1,1+2+1+1,2+1+1+1,2+2+1,1+2+2,2+1+2,共8种
规律:1,2,3,5,8......,从第3项开始,当前项的值就是前面两项的和,即著名的斐波那契数列
4.代码:
class Solution(object):
def climbStairs(self, n):
# n小于等于2时,直接返回n
if n<=2:
return n
# 初始化前两项
a, = 1, 2
# 从第三项开始遍历,由于n算在结果中,故range第二个数为n+1,range数组范围为左闭右开,故区间为[3, n+1)
for i in range(3, n+1):
# 节省空间,不使用dp数组,下面附使用列表的方法
# 设n为4,则有i=3:p, q = q, (p+q) = 2, 3;i=4: p, q = q, (p+q) = 3, 5,故结果为5
p, q = q, (p+q)
return q
————————————————————-——————————————————————
下面将介绍使用列表的方法:
class Solution:
def climbStairs(self, n: int) -> int:
if n<=3:
return n
s = [0 for i in range(n)]
s[0] = 1
s[1] = 2
for i in range(2, n):
s[i] = s[i - 1] + s[i - 2]
return s[n-1]