小孩上楼梯的方式的种类
2019独角兽企业重金招聘Python工程师标准>>>
例3:一共有10级,每次可走一步也可以走两步.必须要8步走完10级楼梯. 问:一共有多少种走法?
分析:走一步的需要6次,走两步的需要2次。因此,本题是6个1、2个2的组合问题。在6个一步中,插入2个两步的,因可放在第一个1步之前,也可以放在最后一个1步之后,所以6个1步有7个空.因此,如果两个两步在一起有c(7,1)种;如果两个两步的分开来插有C(7,2)种,因此共有c(7,1)+c(7,2)=7+21=28(种)=C(8,2)=C(8,6)
总数=8步中选2中走两步的=8步中选6个走一步的
Java编程实现:(数组迭代,动态规划,递归)
package com.test;
public classzoutaijie {
// 梯有N阶,上楼可以一步上一阶,也可以一次上二阶。编一个程序,计算共有多少种不同的走法。如果上20阶会有几种走法
public staticlongresult[]=new long[100];
public staticvoidmain(String[] args) {
result[0]=result[1]=1;
for(inti=2;i<</span>result.length;i++)
result[i]=-1;
//s不能太大,否则int溢出
int s =60;
//动态规划
long startTime = System.currentTimeMillis();
System.out.println("动态规划解决:"+fun1(s));
long endTime = System.currentTimeMillis();
System.out.println("动态规划解决-程序运行时间:"+(endTime-startTime)+"ms");
//数组叠加
long startTime2 = System.currentTimeMillis();
System.out.println("数组叠加实现:"+fun2(s));
long endTime2 = System.currentTimeMillis();
System.out.println("数组叠加实现-程序运行时间:"+(endTime2-startTime2)+"ms");
//递归方法
long startTime1 = System.currentTimeMillis();
System.out.println("递归方法解决:"+fun(s));
long endTime1 = System.currentTimeMillis();
System.out.println("递归方法解决-程序运行时间:"+(endTime1-startTime1)+"ms");
}
public staticlongfun(ints){
if(s==0 || s==1)
return 1;
else{
return fun(s-1)+fun(s-2);
}
}
public staticlongfun1(ints){
if(result[s]>=0) {
return result[s];
}else{
result[s]=(fun1(s-1)+fun1(s-2));
return result[s];
}
}
public staticlongfun2(ints){
long result_1[]=newlong[s+1];//注意这个要大一个,多了个第0个
result_1[0]=result_1[1]=1;
for(inti=2;i<=s;i++)
result_1[i]=result_1[i-1]+result_1[i-2];
return result_1[s];//s就是第s+1个
}
}
分析:
(1) int s=48时候的运行效果:
(2). int s=60时候的运行效果
显然数组叠加和动态规划效率高很多很多,不是一个数量级的!
/**
* 功能:有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。计算小孩上楼梯的方式有多少种。
*/
三种方法:
方法一:
//递归法/*** 思路:自上而下的方式。* 最后一步可能是从第n-1阶往上走1阶、从第n-2阶往上走2阶或从第n-3阶往上走3阶。* 因此,抵达最后一阶的走法,抵达这最后三阶的方式的综合。* @param n* @return*/public static int countWays(int n){if(n<0)return 0;else if(n==0)//注意此处条件return 1;else{return countWays(n-1)+countWays(n-2)+countWays(n-3);}}
方法二:
//动态规划/*** 思路:每次调用都会分支出三次调用。予以动态规划加以修正。* @param n* @param map* @return*/public static int countWaysDP(int n,int[] map){if(n<0)return 0;else if(n==0)return 1;else if(map[n]>-1)return map[n];else{map[n]=countWaysDP(n-1,map)+countWaysDP(n-2,map)+countWaysDP(n-3, map);return map[n];}}
方法三:
- package com.tian;
- import java.util.TreeMap;
- /**
- * 爬楼梯的算法(有一个人要爬楼梯,楼梯有N个台阶,此人最多可以爬M个台阶
- * 问这个人上楼有多少中上法)
- * @author Administrator
- *
- */
- public class Test {
- public static void main(String[] args) {
- System.out.println(new Test().suanfa(3,1));
- }
- /**
- * 得到所有能相加等于这个数的2个非自然正数
- * @param n
- */
- public void fenjie(final int n){
- for (int i = 1; i <=n; i++) {
- System.out.println(i+","+(n-i));
- }
- }
- /**
- *
- * @param n 总台阶数
- * @param m 最多能走的步数
- * @return 返回能走方法数
- */
- public int suanfa(final int n,final int m){
- switch (n) {
- case 1:
- return 1;
- case 2:
- if(m>=2){
- return 2;
- }
- else{
- return 1;
- }
- }
- int result=0;
- for (int i = 1; i <n; i++) {
- int a=i;
- int b=n-i;
- System.out.println(i+","+(n-i));
- result+=suanfa(a, m)*suanfa(b, m);
- }
- return result;
- }
- }
转载于:https://my.oschina.net/u/2822116/blog/791822
小孩上楼梯的方式的种类相关推荐
- 算法017:三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。
题目:三步问题.有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶.2阶或3阶.实现一种方法,计算小孩有多少种上楼梯的方式.结果可能很大,你需要对结果模1000000007.示例1:输入:n = ...
- 上楼梯(递归和迭代的对比)
题目: 一个小孩上楼梯,楼梯有n阶,小孩每次可以上一阶,两阶或三阶,问一共有几种走法(约定n为0是方法数为1). 输入在一行给出n.答案对1e9^7取模. 输出在一行给出方法数. 思路: 这是一道很经 ...
- 面试经典算法-上楼梯问题
上楼梯问题 [面试题]已知楼梯有20阶台阶,上楼可以一步上 1 阶,也可以一步上 2 阶,请编写一个函数计算一种有多少上楼梯的方式. #include "stdio.h" #inc ...
- 蓝桥杯实战应用【赛题解析篇】-小白上楼梯(递归设计)(附python、C++和Java代码)
问题描述 小白正在上楼梯,楼梯有n阶台阶,小白一次可以上1阶,2阶,3阶. 实现一个方法,计算小白有多少种上楼梯的方式. 输入输出 输出:台阶数量. 输出:多少种上楼梯的方式 例如:4阶楼梯 有7种方 ...
- 上楼梯(df和dp解法)
题意: 有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶.2阶.3阶. 请实现一个方法,计算小孩有多少种上楼的方式. 为了防止溢出,请将结果Mod 1000000007 给定一个正整数int n ...
- 【恋上数据结构】递归(函数调用过程、斐波那契数列、上楼梯、汉诺塔、递归转非递归、尾调用)
递归(Recursion) 什么是递归? 函数的调用过程(栈空间) 函数的递归调用过程 递归实例分析(1 + 2 + 3 + ... + 100 的和) 递归的基本思想.使用套路 斐波那契数列 fib ...
- 算法题目:小白上楼梯
2020.2.1312:00 补充一下几种排序的复杂度: 注:算法的稳定性:指的不是算法的时间复杂度不稳定如果在排序之前a在b的前面(a=b时),排序完以后,a跑到b的后面,那么称这个算法不稳定. 排 ...
- 蓝桥杯学习——递归问题(上楼梯)
小白正在上楼梯,楼梯有n阶台阶,小白一次可以上1阶,2阶,3阶,实现一个方法,计算小白有多少种走完楼梯的方式. 思路: 假设楼梯为1阶,小白有1种方式走完楼梯 假设楼梯为2阶,小白有2钟方式走完楼梯 ...
- 小白上楼梯(递归设计)
import java.util.Scanner; /*** 小白上楼梯(递归设计)* @author 田秀彪* 小白正在上楼梯,楼梯有n阶台阶,小白一次可以上一阶,两阶或三阶,* 实现一个方法,计算 ...
最新文章
- CynosDB技术详解——存储集群管理
- mysql 索引分析工具_Mysql:性能分析以及Explain工具的使用
- tomcat 在eclipse中可以启动,独立不能启动
- 15款13英寸低配mbp的外接显示器选择
- 计算机total函数,以一敌十的SUBTOTAL函数,你不会用就太可惜了!
- ArcGIS教程 - 9 矢量数据空间分析
- 如何利用信息差来创造价值?
- Ubuntu16.04安装网易云音乐后打不开
- 【bzoj4200】【NOI2015】【小园丁与老司机】【dp+最小流】
- 用命令提示符打开MySQL并编译sql语句
- LSD计算机控制人体大脑,科学家发现了LSD对大脑的影响
- C++求球的面积与体积,公式一样输出结果不一样?
- Arduino Leonardo教程:如何回车,特殊按键定义,DIY超便宜的键盘主控
- 计算机名打印机无法共享,打印机共享不了怎么回事 打印机共享不了原因和解决办法【详解】...
- 批量识别PDF/OFD/PNG/JPG电子发票到EXCEL
- login-shell和non login-shell区别 & bash配置文件实验报告
- 米的换算单位和公式_Excel 怎样进行单位换算,excle怎么把米换算公里
- 数据库——《对数据进行排序》
- 基站网口损坏检查方法
- 【智能材料】用人工智能发现新型材料,金属玻璃可替代钢材