爬楼梯算法

假设一个楼梯有 N 阶台阶,人每次最多可以跨 2 阶,求总共的爬楼梯方案数。

这里使用非递归实现:
先不写代码,自己计算当楼梯数为1/2/3/4/5时,对应的爬法有1/2/3/5/8/13/21种。可以发现,随着楼梯数N的增加,爬法总数呈现斐波那契数列规律增加,即f(n) = f(n-1) + f(n-2),知道这个规律后,使用下面的循环即可实现:
public class Test {
    
    public static void main(String[] args) {
        System.out.println(print(5));
    }
    
    static int print(int n) {
        if(n == 1) {
            return 1;
        } else if(n == 2) {
            return 2;
        } else {
            int s1 = 1;
            int s2 = 2;
            int ss = 0;
            for(int i = 3; i<= n; i++) {
                ss = s1 + s2;
                s1 = s2;
                s2 = ss;
            }
            return ss;
        }
    
    }
}

原文地址:https://www.cnblogs.com/yuanfei1110111/p/10331462.html

时间: 2024-10-11 03:37:53

爬楼梯算法的相关文章

【LeetCode-面试算法经典-Java实现】【070-Climbing Stairs(爬楼梯)】

[070-Climbing Stairs(爬楼梯)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top? 题目大意 你正在爬一个楼梯,要走n步才

一步一步写算法(之爬楼梯)

原文:一步一步写算法(之爬楼梯) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 前两天上网的时候看到一个特别有意思的题目,在这里和朋友们分享一下: 有一个人准备开始爬楼梯,假设楼梯有n个,这个人只允许一次爬一个楼梯或者一次爬两个楼梯,请问有多少种爬法? 在揭晓答案之前,朋友们可以自己先考虑一下: 这个人爬n层楼梯,那么它也不是一下子就可以爬这么高的,他只有两个选择,要么从n-2层爬过来,要么从n-1层爬过来.除此之外,他没有别的选择.此

面试算法题:爬楼梯,N级楼梯有多少种走法?

By Long Luo 个人博客链接 最近去面试时,在一家小公司面试时,公司小BOSS给我出了一道算法题: 一个人爬楼梯,一步可以迈一级,二级,三级台阶,如果楼梯有N级,要求编写程序,求总共有多少种走法. 这个问题应该是一个很老的题目了,用中学数学来说,就是一个排列组合问题.当时拿到这个题目之后,首先想到使用递归的思想去解决这个问题: N级楼梯问题可以划分为:N-1级楼梯,N-2级楼梯,N-3级楼梯的走法之和. 先计算下0,1,2,3及楼梯有多少种走法: 1 --> 1 2 --> 11 2

C++算法之爬楼梯问题的代码

如下代码是关于C++算法之爬楼梯问题的代码. { if(layer <= 0) return; return; } (2)判断当前的层数是为1或者是否为2 { if(layer <= 0) return; if(layer == 1){ printf_layer_one(layer, stack, top); return; } if(layer == 2){ printf_layer_two(layer, stack, top); return; } return; } (3)对于2中提及的

爬楼梯——递归与函数自调用算法

题目描述 Description 树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数 例如:楼梯一共有3级,他可以每次都走一级,或者第一次走一级,第二次走两级 也可以第一次走两级,第二次走一级,一共3种方法. 输入输出格式 Input/output 输入格式: 输入包含若干行,每行包含一个正整数N,代表楼梯级数,1 <= N <= 30 输出格式: 不同的走法数,每一行输入对应一行输出 输入输出样例 Sample input/output 样例测试点#1 输入样例: 5 8

菜鸡学算法--70. 爬楼梯

先来看题目: 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2输出: 2解释: 有两种方法可以爬到楼顶.1. 1 阶 + 1 阶2. 2 阶 示例 2: 输入: 3输出: 3解释: 有三种方法可以爬到楼顶.1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶 作为一个菜鸡,看到题目直接懵逼,思路混乱. 解题大招: 首先,计算可执行的逻辑最后

Jarvis OJ - 爬楼梯 -Writeup

Jarvis OJ - 爬楼梯 -Writeup 本来是想逆一下算法的,后来在学长的指导下发现可以直接修改关键函数,这个题做完有种四两拨千斤的感觉,记录在这里 转载请标明出处:http://www.cnblogs.com/WangAoBo/p/7222012.html 题目: 分析: 先看apk的外部特征,在模拟器中安装apk,如下: 每次点击爬一层楼按钮以爬的楼层会加1,爬到了,看FLAG按钮点击无效,于是猜测需要爬到指定的楼层才可以看到flag. 首先大致浏览apk的java代码(这里使用的

删除排序数组中的重复数字、买卖股票的最佳时机、爬楼梯

题目1:删除排序数组中的重复数字 描述:给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度. 不要使用额外的数组空间,必须在原地没有额外空间的条件下完成. 题目2:买卖股票的最佳时机 描述:假设有一个数组,它的第i个元素是一支给定的股票在第i天的价格.如果你最多只允许完成一次交易(例如,一次买卖股票),设计一个算法来找出最大利润. 题目3:爬楼梯 描述:假设你正在爬楼梯,需要n步你才能到达顶部.但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶

3089:爬楼梯

总时间限制: 1000ms 内存限制: 65536kB描述树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数例如:楼梯一共有3级,他可以每次都走一级,或者第一次走一级,第二次走两级也可以第一次走两级,第二次走一级,一共3种方法. 输入输入包含若干行,每行包含一个正整数N,代表楼梯级数,1 <= N <= 30输出不同的走法数,每一行输入对应一行输出样例输入5810样例输出83489 算法:递归或递推,模型:斐波那契数列. 1 #include <stdio.h>