算法题:假如一次可以上1或2台阶,有n个台阶,n的取值范围:1到45,有多少种方式,到n个台阶?Java实现

时间: 2024-02-28 15:56:27 浏览: 15
同样是斐波那契数列问题,可以使用动态规划算法来解决。Java代码如下: ```java public int climbStairs(int n) { if(n == 1) return 1; if(n == 2) return 2; int[] dp = new int[n+1]; dp[1] = 1; dp[2] = 2; for(int i=3; i<=n; i++){ dp[i] = dp[i-1] + dp[i-2]; } return dp[n]; } ``` 时间复杂度为O(n),可以在瞬间得到结果。需要注意的是,当n较大时,需要使用long类型的变量来保存dp数组的值,避免溢出。
相关问题

算法题:假如一次可以上1或2台阶,有n个台阶,n的取值范围:1到45,有多少种方式,到n个台阶?

这是一个经典的斐波那契数列问题。假设到达第n个台阶的方法数为f(n),那么有以下递推式: f(1) = 1 f(2) = 2 f(n) = f(n-1) + f(n-2) 这个递推式的意思是,到达第n个台阶的方法数等于到达第n-1个台阶的方法数加上到达第n-2个台阶的方法数。因为每次可以走1个或2个台阶,所以到达第n个台阶的方法数只能从第n-1个台阶或第n-2个台阶转移而来。 根据递推式可以用动态规划算法来解决这个问题,时间复杂度为O(n)。具体地,可以用一个数组dp来保存每个台阶的方法数,初始化dp[1]=1, dp[2]=2,然后从3到n依次计算dp[i]的值,最终返回dp[n]即可。 下面是Python代码实现: ``` def climbStairs(n: int) -> int: if n == 1: return 1 if n == 2: return 2 dp = [0] * (n+1) dp[1] = 1 dp[2] = 2 for i in range(3, n+1): dp[i] = dp[i-1] + dp[i-2] return dp[n] ``` 当n=45时,该算法的运行时间约为0.1ms,可以在瞬间得到结果: ``` >>> climbStairs(45) 1836311903 ```

假设有2种上楼梯的步伐:1个台阶/步,2个台阶/步。从1楼到2楼有n级台阶。有多少种不同的走法。

这是一个经典的斐波那契数列问题,可以使用递归或动态规划来解决。 首先考虑递归方法。设 `f(n)` 表示走到第 `n` 级台阶的不同走法数量,则有以下递推式: ``` f(n) = f(n-1) + f(n-2) ``` 解释一下,走到第 `n` 级台阶可以从第 `n-1` 级台阶走一步或者从第 `n-2` 级台阶走两步到达。当 `n=1` 时,只有一种走法;当 `n=2` 时,有两种走法(一步一步走或者直接跨两步)。 根据递推式,可以编写如下的递归函数来求解: ```python def count_ways(n): if n == 1: return 1 elif n == 2: return 2 else: return count_ways(n-1) + count_ways(n-2) ``` 然而,这种递归方法会有很多重复计算,导致时间复杂度非常高,随着 `n` 的增加,计算时间会指数级增长。 因此,我们可以使用动态规划(DP)来优化算法。具体来说,我们可以使用一个数组 `dp` 来记录到每个台阶的不同走法数量,初始值为 `dp[1] = 1, dp[2] = 2`,然后使用递推式 `dp[i] = dp[i-1] + dp[i-2]` 来计算剩余的值。最后,返回 `dp[n]` 即可。 下面是使用动态规划的代码实现: ```python def count_ways(n): if n == 1: return 1 elif n == 2: return 2 else: dp = [0] * (n+1) dp[1] = 1 dp[2] = 2 for i in range(3, n+1): dp[i] = dp[i-1] + dp[i-2] return dp[n] ``` 这样,我们就可以高效地计算出到第 `n` 级台阶的不同走法数量了。

相关推荐

最新推荐

recommend-type

【算法题】青蛙跳台阶问题(附过程取模证明)

求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 示例 1: 输入:n = 2 输出:2 示例 2: 输入:n = 7 输出:21 提示: 0 &lt;= n &lt...
recommend-type

1、 LMS算法与RLS算法有何异同点? 2、 自适应均衡器可以采用哪些最佳准则

1、 LMS算法与RLS算法有何异同点? 2、 自适应均衡器可以采用哪些最佳准则
recommend-type

python简单算法04:判断一个字符串是否为回文串的排列之一

问题简介 解答 问题简介 给定一个字符串,编写一个函数判定其是否为某个回文串的...即奇数只能为1或0个,例如acca,accbcca等 from collections import Counter def palindromic(s): #统计所有字符出现的次数 num=l
recommend-type

PID算法之我见,详细讲解PID认知,让你上升一个新台阶

对于想使用PID算法对一个控制对象(可以是倒立摆)进行稳定控制,除了需要对PID算法有比较清晰的理解,还需要一些单片机编程的基础,对于一个新手,面对这样一个任务可能会感觉有些捉襟见肘,不知如何下手。...
recommend-type

有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数.docx

有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 */ /*算法:3个for循环加一个if语句; * ...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

SQL怎么实现 数据透视表

SQL可以通过使用聚合函数和GROUP BY子句来实现数据透视表。 例如,假设有一个销售记录表,其中包含产品名称、销售日期、销售数量和销售额等信息。要创建一个按照产品名称、销售日期和销售额进行汇总的数据透视表,可以使用以下SQL语句: ``` SELECT ProductName, SaleDate, SUM(SaleQuantity) AS TotalQuantity, SUM(SaleAmount) AS TotalAmount FROM Sales GROUP BY ProductName, SaleDate; ``` 该语句将Sales表按照ProductName和SaleDat
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。