首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

N楼梯,一次走1个台阶或者2个台阶,共有多少种走法?

假设你需要走n 楼梯才能到达楼顶,走楼梯的方式有两种,一次走1个台阶或者一次走2个台阶,问有多少种不同的方法可以走完这n楼梯?...先穷举几个n值分析下: n=1,共1种; {1} n=2,共2种; {1,1},{2} n=3,共3种 {1,2}, {1,1,1},{2,1} n=4,共5种 {1,1,2},{2,2}, {1,2,1...} 可以看到,除了n=1和n=2两种情况,是固定的走法外; 走n台阶时,可以在n-2个台阶的基础上一次走2个台阶,也可以在n-1个台阶的基础上走1个台阶;也就是f(n)=f(n-1)+f(n-2),这个公式就是著名的斐波那契数列...,却不是算法上最优的.明显在计算n时,会计算两次n-2,时间复杂度是O(n^n),效率相当低的算法了....简单分析下: 容易得出如下结论: f(1) =1 f(2)=1 f(n)=f(n-1)+f(n-2) 在看一下称为黄金分割数列的原因,随着n趋向于无穷大,f(n)/f(n+1)的值越趋近于0.618.

4.5K22
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    N(奇数)幻方-java实现代码

    看完最强大脑,有一期是说N幻立方的,作为一个程序员,我的第一反应时我可以用程序实现,在此公布N(奇数)幻方的java实现代码: package com.lzugis.test; public...class Practice { public static int[][] magicOdd(int n) { int[][] square = new int[n + 1][n + 1];...int i = 0; int j = (n + 1) / 2; for (int key = 1; key <= n * n; key++) { if ((key % n) == 1)...3幻方 ? 5幻方 备注: 幻方(Magic Square)是一种将数字安排在正方形格子中,使每行、列和对角线上的数字和都相等的方法。...幻方中间格的值为(N*N+1)/2,即3幻方中间为(3*3+1)/2=5,3幻方中间为(5*5+1)/2=13,…… 如有疑问请联系: QQ:1004740957 Email:niujp08@qq.com

    77241

    n行列式计算Python和C语言实现

    或者说,在 n 维欧几里得空间中,行列式描述的是一个线性变换对“体积”所造成的影响。 这里介绍一下计算机计算行列式的简单方法,只用于我们一般计算行列式用,不适合科研计算大数据。...m) == 1:         return m[0][0]     else:         s = 0         for i in range(len(m)):             n...= i] for row in m[1:]]  # 这里生成余子式             s += m[0][i] * det(n) * (-1) ** (i % 2)         return...s print('答案为: ', det(eval(input('输入行列式(格式为 [[a11,a12],[a21,a22]] 以此类推): \n')))) python效果图: ?...: C #include"stdio.h" int main() {     int z,r,s,j,i;     double a[20][20],m=1.0,k;     printf("请输入

    1.3K20

    到底是爬一还是爬两

    需要 n 你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 示例 1: 输入:2 输出:2 解释:有两种方法可以爬到楼顶。...1. 1 + 1 + 1 2. 1 + 2 3. 2 + 1 解题思路 自顶向下分析,要想爬上 n 台阶,由于一次可以爬 1 或 2 台阶,所以爬上 n 台阶有两种可能...: 从 n - 1 台阶爬 1 台阶n - 2 台阶爬 2 台阶 因此问题就可转化为求爬 n - 1 台阶和爬 n - 2 台阶的方法数,由于这两者相互独立所以相加即可得到爬上 n 台阶的方法数...分析超时原因 从上面的爬上 n 台阶的图中,可以看出对于爬 n - 2 台阶的方法种数就有两次重叠,这两次重叠我们只需要计算一次就可以了,同理对于爬 n - 3 台阶的方法也有重叠的情况,如果这颗递归树继续向下画的话...由于爬上 n 台阶的方法数只与爬上 n - 2 台阶和爬上 n - 1 台阶的方法数相关,所以没有必要再去定义一个dp数组,只需要定义两个变量分别存储爬上 n - 1 台阶的方法数和爬上 n -

    48150

    C语言经典递归题目 -- 青蛙跳台阶问题

    有两级台阶的情况 有两级台阶的时候,青蛙有两种跳法。 跳一,在跳一: 直接跳两: 有三级台阶的情况: 有三级台阶的时候,青蛙有三种跳法。...跳一,再跳一,再跳一: 跳一,再跳两: 跳两,再跳一: ---- 思路分析 经过上面的分析,我们知道了一级、二级和三级台阶的跳法,现在要我们求 n台阶的跳法...,我们可以这样思考: 假设这里有 n台阶,那么我们第一步就有两种选择: 跳一: 跳两: 假设 n台阶的跳法一共有 f(n) 种,那么: 当我们第一步选择跳一时...当我们第一步选择跳二时,就剩下 n-2 级台阶,即剩下的跳法是 f(n-2) 种。...所以 n台阶的跳法总数应该是二种跳法之和(第一步可能跳一,也可能跳二):f(n-1) + f(n-2) 。

    50000

    ​LeetCode刷题实战70:爬楼梯

    需要 n 你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。...1. 1 + 1 2. 2 示例 2: 输入:3 输出:3 解释:有三种方法可以爬到楼顶。...1. 1 + 1 + 1 2. 1 + 2 3. 2 + 1 解题 本题可以利用动态规划解决 。...思路:可以这样想,n台阶,一开始可以爬 1 步,也可以爬 2 步,那么n台阶爬楼的爬楼方法就等于 一开始爬1步的方法数 + 一开始爬2步的方法数,这样我们就只需要计算n-1个台阶的方法数和n-2个台阶方法数...,同理,计算n-1个台阶的方法数只需要计算一下n-2个台阶n-3个台阶,计算n-2个台阶需要计算一下n-3个台阶n-4个台阶…… ?

    22830

    简单动态规划—爬楼梯

    需要 n 你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 示例 1: 输入:2 输出:2 解释: 有两种方法可以爬到楼顶。...1. 1 + 1 + 1 2. 1 + 2 3. 2 + 1 解题思路 这道题目算得上最简单的动态规划类的题目了,我们来一个一个分析一下: 当只有 1 台阶时,你只有一种方式爬到顶端...当只有 2 台阶时,你有两种方式,如示例1所示 当只有 3 台阶时,你有三种方式,如示例2所示 分析到这里的时候,看看这几个数据,我有一个大胆的猜测,当只有 4 台阶时,可以有 爬到第2台阶所需要的方法数...加上 爬到第3台阶所需要的方法数 种方法数,为什么这么说呢?...你想想,要想爬到第4台阶,你只能是从第3或者第2台阶爬上来的,只有这两种方式对吧,所以: 4方法总数 = 3方法总数 + 2方法总数 ?

    46420
    领券