day10(跳台阶)
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
提交链接:点击
思路:采用动态规划的思想。设F[n]表示的是到达n级台阶的所有跳法数。考虑n级台阶总共有多少中跳法F[n],先考虑n-2级台阶有多少中跳法F[n-2],再考虑n-1级台阶有多少中跳法F[n-1]。其中,由于青蛙一次能跳1级台阶或2级台阶,于是n-2级台阶青蛙可以跳2级台阶到达n级台阶,n-1级台阶青蛙可以跳1级到台阶到达n级台阶。于是得到动态规划式子:F[n]=F[n-1]+F[n-2]
代码:
class Solution { public: int jumpFloor(int number) { int F[number+1]; F[0]=1; F[1]=1; for(int i=2;i<=number;i++){ F[i]=F[i-1] + F[i-2]; } return F[number]; } };
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
提交链接:点击
思路:因为青蛙可以跳1级,2级...n级。由上一道题,可以考虑这题,写出动态规划表达式
f(n) = f(n-1)+f(n-2)+...+f(n-(n-1)) + f(n-n) => f(0) + f(1) + f(2) + f(3) + ... + f(n-1)
f(n-1) = f(0) + f(1)+f(2)+f(3) + ... + f((n-1)-1) = f(0) + f(1) + f(2) + f(3) + ... + f(n-2)
f(n) = f(0) + f(1) + f(2) + f(3) + ... + f(n-2) + f(n-1) = f(n-1) + f(n-1)
可以得出:
f(n) = 2*f(n-1)
代码:
class Solution { public: int jumpFloorII(int number) { int F[number+1]; F[0]=1; F[1]=1; for(int i=2;i<=number;i++){ F[i]=2*F[i-1]; } return F[number]; } };
非学无以广才,非志无以成学! 【Magic_chao】
posted on 2018-09-19 20:08 Magic_chao 阅读(93) 评论(0) 编辑 收藏 举报