爬楼梯-leetcode解题

爬楼梯 题述

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

注意:给定 n 是一个正整数。

示例 1:

输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。

  1. 1 阶 + 1 阶
  2. 2 阶
    示例 2:

输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
3. 1 阶 + 1 阶 + 1 阶
4. 1 阶 + 2 阶
5. 2 阶 + 1 阶

解题思路及代码

这个题,一开始读会有点蒙,我感觉这个存粹是造出来的题目,就是为了考斐波那契数列之类的,用动态规划法去解就是杀鸡用牛刀嘛。最优解:斐波那契数列,通解:动态规划
由于动态规划我不会,
下面就说一下斐波那契咋想到的。
首先,找张纸,把答案写下来,(step为方法数)
n=0 时, step=1,
n=1 时, step=1,
n=2 时, step=2,
n=3 时, step=3,
n=4 时, step=5,
n=5 时, step=8,
1,1,2,3,5,8,……
由此可知,当每次增加一级台阶的时候,有前面一介台阶step+前前一介台阶step的和。这不就是斐波那契数列的特点吗,从第三个数开始,每个数都等于前两个数的和。

另一方面, 通过数学归纳法,(方法数用 f(n)表示)
显然
当 n<=2 时,f(n)= n ,

当 n>2 时,f(n)= f(n-1)+f(n-2)即 前面一介台阶step + 前前一介台阶step。

到这里,推知是斐波那契数列,
不过,不知道也没关系,不耽误写代码。

下面贴代码,
代码语言和数学思路毕竟还有很大区别,
所以讲一下代码咋写的:
首先,输入很明确都是正整数,
判断一下输入是否大于2,
如果小于2,输出n就行,
如果大于2时,
满足前两个数step的和为输出结果这一条件。
因为我们要求至少两个数的和,所以至少需要两个变量,
这里就 初始化 step1 step 都为1 ,即斐波那契数列的前两个 1 ,
然后累加,
这里抖个小机灵,python可以直接以 a,b=b,a+b的形式赋值,所以非常方便,
直接累加/赋值,最后输出step就得到结果啦!
上代码:

class Solution:
    def climbStairs(self, n: int) -> int:
        if n>2:
        	step1=1
        	step=1
            for i in range(0,n-1):
                step1,step=step,step1+step
            return step
        else:
            return n

附上结果图:
爬楼梯-leetcode解题_第1张图片

你可能感兴趣的:(python)