当前位置: 首页 > article >正文

java面试题,上楼梯有多少种方式

java面试题,上楼梯有多少种方式

题目:一个小孩上一个N级台阶的楼梯,他可以一次走1阶、2阶或3阶,那么走完N阶有多少种方式。

很自然的想法是使用递归:

public class Test04 {

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);

}

}

public static void main(String[] args) {

System.out.println(countWays(5)); // 13

// 11111, 1112, 1121, 1211, 122, 131, 113, 23, 221, 2111, 212, 32, 311

}

}

然而,这里的递归是一个头递归,也就是说要先递归再回溯(编译器无法将其优化为一个循环结构),而且是将三个递归的结果进行合并,这样的话算法的运行时间呈指数增长(渐近时间复杂度为O(3^N))。可以利用动态规划的思想对递归进行优化,其代码如下所示:

public class Test04 {

public static int countWaysDP(int n) {

int[] map = new int[n + 1];

for (int i = 0; i < map.length; i++) {

map[i] = -1;

}

return countWaysDP(n, map);

}

private 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];

}

}

public static void main(String[] args) {

System.out.println(countWaysDP(5)); // 13

// 11111, 1112, 1121, 1211, 122, 131, 113, 23, 221, 2111, 212, 32, 311

}

}
 


http://www.kler.cn/a/160056.html

相关文章:

  • NPOI 实现Excel模板导出
  • 技术题总结
  • 游戏引擎学习第10天
  • Wordpress常用配置,包括看板娘跨域等
  • LeetCode59. 螺旋矩阵 II
  • 百度搜索AI探索版多线程批量生成TXT原创文章软件-可生成3种类型文章
  • 一对一聊天
  • CMMI5大成熟度等级和4大过程域
  • 面试问题--计算机网络:二层转发、三层转发与osi模型
  • [JavaScript前端开发及实例教程]计算器井字棋游戏的实现
  • SpringBoot MyBatis连接数据库 查询数据(注解方式)
  • 校园教务管理系统
  • svn合并冲突时每个选项的含义
  • 【S32K3环境搭建】-0.3-S32DS安装实时驱动RTD(Real-Time Driver)
  • 使用Java对yaml和properties互转,保证顺序、实测无BUG版本
  • 【Java Web学习笔记】3 - JavaScript入门
  • unity学习笔记
  • 漏洞扫描服务是什么
  • 【栈】车队
  • Intellij idea 内存不够用了,怎么处理?
  • 【CSP】202305-1_重复局面Python实现
  • Java利用UDP实现简单的双人聊天
  • python实现一个计算器
  • Android的前台服务
  • 【海思SS528 | VDEC】MPP媒体处理软件V5.0 | 视频解码模块——学习笔记
  • Spring-Boot-ReactiveRedisTemplate自动配置定义和序列化方式选择