zoukankan      html  css  js  c++  java
  • 剑指OFFER 跳台阶

    剑指OFFER 跳台阶

    递归解法

    class Solution {
        
    public:
        int count = 0;
        
        void recur(int n)
        {
            if(n <= 1)
            {
                count++;
                return;
            }
            recur(n - 1);
            recur(n - 2);
        }
        
        int jumpFloor(int number) {
            recur(number);
            return count;
        }
    };
    

    二层递归

    画出状态图,有点类似二叉树的遍历取叶子结点的个数。

    1578631983046

    动态规划解法

    在写代码之前,先把问题捋清楚

    1578631183655

    这样就可以写出代码了

    class Solution {
        
    public:
        vector<int> dp;
        int jumpFloor(int number) {
            dp.resize(number+1);
            dp[0] = 0;
            dp[1] = 1;
            dp[2] = 2;
            int i;
            for(i=3;i<=number;i++)
            {
                dp[i] = dp[i-1]+dp[i-2];
            }
            return dp[number];
        }
    };
    

    变态跳台阶

    题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

    比较普通跳台阶的写法

    dp[i] = dp[i-1]+dp[i-2];//为跳一级或者两极台阶的写法,那么跳n级台阶的就是把之前所有的dp加起来就行了
    

    给出完整代码

    class Solution {
    public:
        vector<int> dp;
        int jumpFloorII(int number) {
            dp.resize(number+1);
            dp[0] = 0;
            dp[1] = 1;
            dp[2] = 2;
            int i;
            for(i=3;i<=number;i++)
            {
                for(int j=0;j<i;j++)
                {
                    dp[i] = dp[i] + dp[i-j];
                }
                dp[i] = dp[i] + 1;//青蛙甚至可以一次就调到最高那级台阶
            }
            return dp[number];
        }
    };
    
  • 相关阅读:
    第5周作业
    第四周JAVA作业
    第三周JAVA学习
    第二周JAVA学习日志
    有关JAVA学习
    Swift 页面跳转
    Swift 登录判断
    单元测试学习
    WCF学习心得
    初次使用Oracle
  • 原文地址:https://www.cnblogs.com/virgildevil/p/12175602.html
Copyright © 2011-2022 走看看