当前位置: 首页 > news >正文

leetcode hot100【LeetCode 70. 爬楼梯】java实现

LeetCode 70. 爬楼梯

题目描述

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

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

注意: 给定 n 是一个正整数。

示例 1:

输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶

示例 2:

输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶

Java 实现代码

方法:迭代
class Solution {public int climbStairs(int n) {if (n <= 2) {return n;}int first = 1, second = 2;for (int i = 3; i <= n; i++) {int third = first + second;first = second;second = third;}return second;}
}

解题思路

这个问题是斐波那契数列的一个变种。我们可以观察到,要到达第 n 个台阶,有两种情况:

  1. 从第 n-1 个台阶走上来,方法数为 climbStairs(n-1)
  2. 从第 n-2 个台阶走上来,方法数为 climbStairs(n-2)

因此,到达第 n 个台阶的总方法数为 climbStairs(n-1) + climbStairs(n-2)。这就是斐波那契数列的定义。

复杂度分析

  • 时间复杂度:O(n),因为我们需要从 1 到 n 遍历一次。
  • 空间复杂度:O(1),我们只需要常数级别的空间来存储几个变量。

通过使用动态规划的思想,我们可以避免重复计算,从而提高效率。上面的代码实现了这一思想,通过迭代而不是递归来计算爬楼梯的方法数。

注:题目来源leetcode网站

http://www.lryc.cn/news/472868.html

相关文章:

  • Java异常2
  • 2024熵密杯初始题2
  • echarts属性之title
  • VUE errolog, vue 错误集
  • 驱动开发系列13 - Linux tasklet用法介绍
  • redis实现分布式锁,go实现完整code
  • 解析日期、编码
  • 【Qt】QApplication::restoreOverrideCursor():恢复鼠标光标到原始状态的用法解析
  • 重生之“我打数据结构,真的假的?”--2.单链表(无习题)
  • 【有啥问啥】视频插帧算法技术原理详解
  • Leetcode148,109以及二者的合并 -> Tencent面试算法题 - 无序双向链表转BST
  • 【蓝桥杯选拔赛真题77】python计算小球 第十五届青少年组蓝桥杯python选拔赛真题 算法思维真题解析
  • 获取Hive表备注
  • 10.30学习
  • 什么是栈溢出
  • 在linux中arm-linux-gcc和/usr/bin/gcc有啥区别
  • 常用环境部署(二十二)——MySQL的数据库迁移到另一个机器上
  • 两台主机只能单方向ping通
  • redis windows 5.0 下载
  • 视频转gif怎么转换?6种视频格式转换简单方法分享,附操作截图!
  • StructRAG简介
  • java脚手架系列12-mongoDB
  • python四舍五入保留两位小数
  • 期权懂|有什么期权交易策略能够稳赚不赔的?
  • 笔记本脱机状态
  • Node.js:模块 包
  • 油动无人机动力测试台-60公斤级-Flight Stand 60 ICE
  • 给grasshopper中的python脚本电池加个标签
  • 别被忽悠了 Lua 数组真的也可以从 0 开始索引?
  • docker占用磁盘过多问题