LeetCode#70爬楼梯问题(2019.9.3)

第一篇原创的学习笔记哦~(其实还有存草稿的没写完的QAQ)

 

问题

爬楼梯。一共 n 阶。

每次可以爬 1 或 2 个台阶。多少种不同的方法?

在LeetCode见到过这道题,研一的算法课第一节也讲了这个例子来引出算法效率与动态规划。

 

思路

一开始我只是单纯的、很繁琐的、直观的用代码实现这个问题解法,后来老师说这个本质上是斐波那契.......

斐波那契数列,即兔子繁殖问题,1、1、2、3、5、8、13、21、34.........

数学递推式:F[n]=F[n-1]+F[n-2]   (n>=3,F[1]=1,F[2]=1)

台阶数:

3   4 5 6

 

方法数:

2 3 5 8 13

还要明确的是,迈腿的次数是:(n/2向下取整)~n

 

解答

 

方法一:递归

F[n]=F[n-1]+F[n-2]   

F[1]=1

F[2]=2

直接这么实现就行,就不贴代码了.........

方法二:哈希表

 

方法三:动态规划(我贴上我在LeetCode写的)

LeetCode#70爬楼梯问题(2019.9.3)_第1张图片

class Solution {
public:
    int climbStairs(int n) {
        if(n==1) return 1;
        if(n==2) return 2;
        else{
            int a=1;
            int b=2;
            int temp=0;
            for(int i=3;i

方法四:备忘录法(不是很清楚QAQ)

我目前的理解是,把动态规划方法里的每一次的temp,都存数组里???

方法五:管他是啥直接上法(我一开始想的)

乱糟糟,好吧QAQ放弃这个方法吧

伪代码啊

    for(i=0~n,level<=n)

         for(flag=1~2)

             if(flag==1) count++,level++

             if(flag==2) count++,level+=2

      j=n+1-(n/2向下取整)

      result[j]=count
然后,找到大小不同的所有count,不同值的count的个数就是方法数

Tips收获

这个题给我的新思路是,一些算法题可以先转化为数学问题,找到数学规律,然后再用代码实现。

你可能感兴趣的:(LeetCode知识点记录,研一)