【剑指offer-解题系列(9)】变态跳台阶
来源:互联网 发布:剑灵水鸢捏脸数据 编辑:程序博客网 时间:2024/06/05 20:07
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
分析
假设 a[n] 是跳上n级台阶的总步数
1、青蛙可以一次猛跳上n级!
2、青蛙可以在前n-1级台阶找出 a[n-1] 种跳法,然后最后跳1步,总共a[n-1]种;3、青蛙可以在前n-2级台阶找出 a[n-2] 种跳法,然后最后跳2步,总共a[n-2]种;
4、青蛙可以在前n-3级台阶找出 a[n-3] 种跳法,然后最后跳3步,总共a[n-3]种;
。。。。。。使用a数组保存之前的计算结果就行。
if(number<=0)return 0;
int*a = new int[1+number];
memset(a,number,0);
int res = jumpFloorII(number, a );
delete[]a;
return res;
}
int jumpFloorII(int number, int *a ){
if(number==0)
return 0;
if(number==1){
a[1]=1;
return a[1];
}
else{
for(int i = 1;i<number;i++){
if(a[i]==0){
a[i] = jumpFloorII(i,a );
}
a[number]+=a[i];
}
a[number]++;
}
return a[number];
}
所以:a[n]=1 + a[n-1]+a[n-2]+a[n-3]+...+a[1];
代码实现
int jumpFloorII(int number) {if(number<=0)return 0;
int*a = new int[1+number];
memset(a,number,0);
int res = jumpFloorII(number, a );
delete[]a;
return res;
}
int jumpFloorII(int number, int *a ){
if(number==0)
return 0;
if(number==1){
a[1]=1;
return a[1];
}
else{
for(int i = 1;i<number;i++){
if(a[i]==0){
a[i] = jumpFloorII(i,a );
}
a[number]+=a[i];
}
a[number]++;
}
return a[number];
}
阅读全文
1 0
- 【剑指offer-解题系列(9)】变态跳台阶
- 剑指offer--(9) 变态跳台阶
- 剑指offer源码系列-变态跳台阶
- 剑指offer 9 变态跳台阶
- 《剑指offer》 NO.9 变态跳台阶
- 《剑指offer》—9、变态跳台阶
- 剑指Offer(9)______变态跳台阶
- 剑指offer(9)—变态跳台阶
- 变态跳台阶(剑指Offer)
- 剑指offer(九)变态跳台阶
- 剑指Offer——(9)变态跳台阶
- 变态跳台阶(剑指Offer 第 9 题)
- 【剑指offer】变态跳台阶
- 【剑指offer】变态跳台阶
- 剑指offer :变态跳台阶
- 剑指Offer-变态跳台阶
- 《剑指offer》变态跳台阶
- 【剑指Offer】变态跳台阶
- 关于UnsupportedClassVersionError
- 文件上传下载
- jq 上传文件相关-判断文件名字/大小-弹出文件管理器
- iOS 切圆角 任意几个角
- Maven实战(七)--官方文档搭建Nexus私服
- 【剑指offer-解题系列(9)】变态跳台阶
- JVM内存管理–GC算法精解(五分钟让你彻底明白标记/清除算法)
- PWM的基本原理及应用实例
- C#代码关于文件文件夹的读写
- CODEVS1004 四子连棋
- idea中配置JDK及更改JDK版本
- Web API--入门--(一)ASP.NET Web API 2(C#)入门
- 机器学习深度学习必备知识框架定时更新
- 【算法】程序猿不写代码是不对的56