跳台阶

来源:互联网 发布:苹果5s用不了4g网络 编辑:程序博客网 时间:2024/06/06 22:45

题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
分析
用动态规划解决,
到达1阶:有1种方式: 0->1;
到达2阶:有2种方式: 0->2,1->2,
到达3阶:有3种方式:0->2->3;0->1->3;0->1->2->3;
归纳可知,到达n的种类恰好是到达n-1和到达n-2的种类数之和。
递推公式很简单:f(i) = f(i-1)+f(i-2);(i>=3);
下面给出C++实现代码:

int jumpFloor(int number){    vector<int> f(number+1,0);    f[1] = 1;    f[2] = 2;    for(int i = 3;i<=number;i++){        f[i] = f[i-1]+f[i-2];    }    return f[number];} 

题目描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
分析
和上面类似,本题的递推公式是:f(k) = f(0)+f(1) + f(2) + … +f(k-1)
C++实现如下:

int jumpFloorII(int number){    vector<int> f(number+1,0);    f[0] = 1;   //到0阶只有1种方法。    f[1] = 1;    f[2] = 2;    for(int i = 3;i<number;i++){        for(int j = 0;j<i;j++){            f[i] += f[j];        }    }    return f[number];}