青蛙跳台阶

青蛙跳台阶

问题描述

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

注:此处的跳n级台阶,是指当共有三级台阶(111,12,21,3)

思路历程

  1. 刚开始,我把题目想岔了,我以为这个题目中的青蛙是永远从第一级台阶开始起跳,于是我写出了这样的算法:

    class Solution {
    public:
        int jumpFloorII(int number) {
            int sum=0;
            for(int i = 0;i<=number;i++)
                sum++;
            return sum;
            }
    };
    

    汗颜,回来兜圈子回来后发现,这写的是个啥啊(自我鄙视一秒钟)

    1. 后来,发现了它的跳台阶的实质,我又想到了先找找青蛙跳台阶的规律吧。然后发现:

台阶数 方案 方案总数

1 1 共计1

2 11,2 共计2

3 111,12,21,3 共计4

4 1111,121,112,13,22,211,31,4 共计8

5 11111,1211,1121,1112,122,131,113,14,2111,212,221,23,311,32,41,5

​ 共计16

6 111111,11112,11121,11211,12111,1122,1212,1221,123,1311,1131,1113,132,141,114,15

​ 21111,2211,2121,2112,222,231,213,24

​ 3111,312,321,33

​ 411,42

​ 51,

​ 6 共计32

······························

emmm,好像是2^(n-1)的关系,,,,

但是仔细一想,当有1级台阶的时候,只有跳完这种情况,也就是f(1)=1

当有2级台阶的时候,要么都跳,要么只跳一级台阶,挑礼物一级台阶,又回到了只有一级台阶的情况

也就是说f(2)=f(1)+1=2*f(1)

而当有3级台阶的时候,那么第一次就有了三种情况,要么跳一级回到f(2)的情况,要么跳两级回到f(1)的情况,要么一次性跳完,也就是说f(3)=f(2)+f(1)+1=2*f(2)

当有第四级台阶的时候,那么第一次起跳就有了四种情况,跳一级、两级、三级或四级,此时跳第二次分别对应还有三级台阶的情况,还有两级台阶的情况以及还有一级台阶的情况,也就是说f(4)=f(3)+f(2)+f(1)+1=2*f(3)

……

以此类推,f(n)=2*f(n-1)
所以说,这完全是一道数学的递推公式题目啊,我纠结了那么久都在想些什么呀(嗐)
因此可以用递归的方式来求解这道题:

c语言:

class Solution {
public:
    int jumpFloorII(int number) {
        if(number==1)
            return 1;
        return 2*jumpFloorII(number-1);
        }
};

此处的代码只有核心函数的部分涉及了算法的相关知识,主函数就没有详细贴出来

本来应该用JS在写一个的,但是JS我才学到变量。后面补上。

但是我看到一些大牛说,这是一道可以递归,记忆化递归,动态规划,递推思想的题目,由于我对动态递归不太熟悉所以我只用了递归的方式去做这道题。后面有时间再说这个题目吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值