leetcode算法70.爬楼梯

简介: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?本文带大家解决这个问题。

一、leetcode算法



1、爬楼梯


1.1、题目


假设你正在爬楼梯。需要 n 阶你才能到达楼顶。


每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?


示例 1:


输入:n = 2

输出:2

解释:有两种方法可以爬到楼顶。


1 阶 + 1 阶

2 阶

示例 2:

输入:n = 3

输出:3

解释:有三种方法可以爬到楼顶。


1 阶 + 1 阶 + 1 阶

1 阶 + 2 阶

2 阶 + 1 阶


1.2、思路


思路一:本题是一道经典的算法题,爬楼梯的问题和我们的生活息息相关,我们几乎每天都需要爬楼梯,我们有时会一阶一阶的上,有时赶时间我们会两阶两阶的蹭蹭的上,有时候累了会两阶一阶交叉着上,那么固定的楼梯阶层数我们一共有几种上楼的方式呢?


我们拿到问题以后如果没有思路可以先找找规律,犹如我们数学中给你几个数或者几个图形让你找规律一样,这个时候我们从1阶楼梯开始找共有几种方式,我们发现,1阶楼梯有一种上楼方式,2阶楼梯有两种上楼方式,3阶楼梯有3种上楼方式,4阶楼梯有5中上楼方式,我们这里可以发现每x阶层的上楼方式等于x-1层和x-2层上楼方式的和,这个时候我们就可以根据这种规律来写代码了。


1.3、答案


18.png


class Solution {
    public int climbStairs(int n) {
        int p = 0, q = 0, r = 1;
        for(int i = 1; i <= n; i++){
            p = q;
            q = r;
            r = p + q;
        }
        return r;
    }
}


复杂度分析


时间复杂度:循环执行 n 次,每次花费常数的时间代价,故渐进时间复杂度为 O(n)。


空间复杂度:这里只用了常数个变量作为辅助空间,故渐进空间复杂度为 O(1)。

相关文章
|
20天前
|
算法
测试工程师的技能升级:LeetCode算法挑战与职业成长
这篇文章通过作者亲身体验LeetCode算法题的过程,探讨了测试工程师学习算法的重要性,并强调了算法技能对于测试职业成长的必要性。
42 1
测试工程师的技能升级:LeetCode算法挑战与职业成长
|
1月前
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
34 6
|
1月前
|
存储 算法 Java
LeetCode经典算法题:打家劫舍java详解
LeetCode经典算法题:打家劫舍java详解
40 2
|
1月前
|
人工智能 算法 Java
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
35 1
|
1月前
|
存储 算法 Java
LeetCode经典算法题:预测赢家+香槟塔java解法
LeetCode经典算法题:预测赢家+香槟塔java解法
32 1
|
1月前
|
存储 算法 Java
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
55 0
|
1月前
|
算法 Java
LeetCode初级算法题:子数组最大平均数+二叉树的最小深度+最长连续递增序列+柠檬水找零
LeetCode初级算法题:子数组最大平均数+二叉树的最小深度+最长连续递增序列+柠檬水找零
30 0
|
1月前
|
算法 Java
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
40 0
|
1月前
|
存储 算法 Java
LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
18 0
|
1月前
|
算法 Java 索引
LeetCode初级算法题:寻找数组的中心索引+x的平方根+三个数的最大乘积+Leetcode 149:直线上最多的点数 Java详解
LeetCode初级算法题:寻找数组的中心索引+x的平方根+三个数的最大乘积+Leetcode 149:直线上最多的点数 Java详解
28 0