有N个台阶,一步可以走一梯或者两梯,请问有多少种走法
有N个台阶,一步可以走一梯或者两梯,请问有多少种走法
最近面试,被问到了这个问题,由于没有看过算法这方面的题,自然这题就凉凉了
力扣题链接 https://leetcode-cn.com/problems/climbing-stairs/
图片来源知乎
分析特殊情况
F(0) n == 0
0种走法
F(1) n == 1
1种走法
F(2) n == 2
2种走法
N > 2
分析当要走N梯时,到底N梯时最后的一种走法只有两种,走一梯或者走两梯,那么就是从 n-1
或者n-2
梯上来
所以 F(N) = F(N-1) + F(N-2)
递归实现
function calcWalkWay(n) {if (n <= 2) return nreturn calcWalkWay(n-1) + calcWalkWay(n-2)
}
优化,由于上面是递归,栈内存会消耗很大,空间复杂度很大
动态规划
可以使用动态规划
dp[n]
就代表第n
梯的走法
function calcWalkWay(n) {if (n <= 2) return nconst dp = []dp[1] = 1dp[2] = 2for (let i = 3; i <= n; i++) {dp[i] = dp[i-1] + dp[i-2]}return dp[n]
}
根据上面的还可以对数据优化
function calcWalkWay(n) {if (n <= 2) return nlet pre = 1let current = 2for (let i = 3; i <= n; i++) {//[current, pre] = [current + pre, current]const temp = currentcurrent = current + prepre = temp}return current
}
有N个台阶,一步可以走一梯或者两梯,请问有多少种走法相关推荐
- 有50级台阶,每次走一阶或两阶,有多少种走法?
在网上看到这个问题,有人给出了代码,用的是求Fibonacci数列前n项和的原理,代码如下: int Fibonacci(int n) {int result[3] = {1, 2};if (num ...
- N级台阶(比如100级),每次可走1步,2步,3步,求总共有多少种走法?
算法题:N级台阶(比如100级),每次可走1步,2步,3步,求总共有多少种走法? 平常不怎么研究算法,直到一次面试后,面试官给我了一个算法题,因为平常没有去看过类似的东西,所以就做错了 根据上面的题目 ...
- 【算法题目】有n个台阶,青蛙一次只能跳1步到k步,请问有多少种跳法?
有n个台阶,青蛙一次只能跳1步到k步,请问有多少种跳法? 这个问题是一个经典的爬楼梯问题,可以使用递推方法解决. 设f[i]表示到达第i层台阶的跳法数,那么到达第i层台阶的跳法数可以由从第i-1,i- ...
- N级台阶,一次上1级或2级或3级或M级,总共有多少种走法
思路 先分析最简单的,也就是每次要不上1级,要么上2级. 这个问题需要反过来思考才能比较容易的找到规律.总共有N级台阶,因为每次要么上1级要么上2级,因此对于第N级台阶来说,它的前一步要么是在N-1级 ...
- 动态规划:机器人走n米有多少种走法问题
最近算法实验中的一个题目,特此分享一下解法. 题目,算法思路,代码如下: /** 题目:* 一个机器人每步可以走 1 米.2 米或 3 米.* 编写一个动态规划算法,计算机器人走n 米,有多少种走法( ...
- 冬冬爬楼梯,一步可以1级,也可以爬2级、3级。冬冬很可爱,每到一处楼梯处,他都想知道直完这个楼梯有多少种走法。但由于有的时候楼梯级数太多,可能是个天文数字,很显然,对于还处于小学5年级的冬冬是不太现实
冬冬爬楼梯,一步可以1级,也可以爬2级.3级.冬冬很可爱,每到一处楼梯处,他都想知道直完这个楼梯有多少种走法.但由于有的时候楼梯级数太多,可能是个天文数字,很显然,对于还处于小学5年级的冬冬是不太现实 ...
- 超级楼梯——有一楼梯共n级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第n级,共有多少种走法?
有一楼梯共n级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第n级,共有多少种走法? 现在给你一个正整数n(0<n<40),请你输出不同的走法数. 如n=2,则输出1(你只有一种走 ...
- 有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?请编程实现。
有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?请编程实现. 输入: 输入一个整数M(1<=M<=20),表示楼梯的级数. 输出: 输出不同走法 ...
- 请编写一个函数,计算n*m的棋盘格子(n为横向的格子数,m为竖向的格子数)沿着各自边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和向下走,不能往左和往上走。
请编写一个函数,计算n*m的棋盘格子(n为横向的格子数,m为竖向的格子数)沿着各自边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和向下走,不能往左和往上走. 递归实现: # ...
最新文章
- nginx启动只有master没有worker_深入浅出Nginx
- 方法重载-Overload
- 非线性方程组求解Matlab实现 (多元牛顿方法、Broyden方法、Broyden方法2)
- Ubuntu18.04 显卡驱动安装
- JVM-分代垃圾回收器
- kafka describe topic
- PHP-Webshell免杀研究
- SEO的有利因素跟不利因素
- 求职信计算机工程师英语作文,开发工程师英文求职信范文
- HTML基础 DOM概览(第一天)
- mysql外键实例学生成绩_mysql 外键(foreign key)的详解和实例
- scrapy python下载图片_使用Scrapy自带的ImagesPipeline下载图片,并对其进行分类。
- SQL语句生成器 V2.0
- 经典白平衡算法(灰度世界法和完美反射法MATLAB完整代码)
- 云计算机根据部署,华为云计算FusionCompute环境部署实验之使用批量部署工具安装...
- 读书笔记 : 人类简史
- CPU-显卡-硬盘性能天梯图排行榜源码
- 如何从本地硬盘启动计算机,解密:如何在计算机BIOS中设置硬盘启动
- PC端微信的文件夹都是些什么
- 纸壳CMS体验升级,快速创建页面,直接在页面中修改内容