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

3.每日LeetCode-爬楼梯(Go,Java,Python)

目录

题目

解法

Go

Java

Python


代码地址:leetcode: 每日leetcode刷题

题目

题号70. 爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

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

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

解法

Go

package mainimport "fmt"//方法一 递归 使用map求解出的结果不用重复求解
//满足公式
//F(1) = 1
//F(2) = 2
//F(n) = F(n-1) + F(n-2) (n>=2)
var mp = make(map[int]int)
func climbStairs1(n int) int {if n <= 2 {return n}if _, ok := mp[n]; ok {return mp[n]} else {rst := climbStairs1(n-1) + climbStairs1(n-2)mp[n] = rstreturn rst}
}// 方法二 使用for循环,用两个变量记录上次和上上次的值,时间复杂度O(n)
func climbStairs(n int) int {if n <= 2 {return n}rst := 0pre := 2prepre := 1for i := 3; i <= n; i++ {rst = pre + prepreprepre = prepre = rst}return rst
}func main() {fmt.Println(climbStairs(7))
}

Java

package org.example;import java.util.HashMap;
import java.util.Map;public class ClimbingStairs {// 方法一 递归 使用map求解出的结果不用重复求解// 满足公式// F(1) = 1// F(2) = 2// F(n) = F(n-1) + F(n-2) (n>=2)private Map<Integer, Integer> mp = new HashMap<Integer, Integer>();public int climbStairs1(int n) {if (n == 1) {return 1;}if (n == 2) {return 2;}if (null != mp.get(n)) {return mp.get(n);} else {int val = climbStairs1(n - 1) + climbStairs1(n - 2);mp.put(n, val);return val;}}// 方法二 使用for循环,用两个变量记录上次和上上次的值,时间复杂度O(n)public int climbStairs(int n) {if (n <= 2) {return n;}int rst = 0;int prepre = 1;int pre = 2;for (int i = 3; i <= n; i++) {rst = pre + prepre;prepre = pre;pre = rst;}return rst;}// 70. 爬楼梯public static void main(String[] args) {ClimbingStairs main = new ClimbingStairs();System.out.println(main.climbStairs(7));}}

Python

# 方法一 递归 使用map求解出的结果不用重复求解
# 满足公式
# F(1) = 1
# F(2) = 2
# F(n) = F(n-1) + F(n-2) (n>=2)
dic = {}
def climbStairs1(n):if n == 1:return 1if n == 2:return 2if n in dic:return dic[n]else:val = climbStairs1(n - 1) + climbStairs1(n - 2)dic[n] = valreturn val# 方法二 使用for循环,用两个变量记录上次和上上次的值,时间复杂度O(n)
def climbStairs(n):if n == 1:return 1if n == 2:return 2count = 0prepre = 1pre = 2for i in range(3, n + 1):count = prepre + preprepre = prepre = countreturn countif __name__ == '__main__':print(climbStairs(3))

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SpringCloud系列(23)--手写实现负载轮询算法
  • 使用paddlepaddle框架构建ViT用于CIFAR10图像分类
  • 基于Vue2与3版本的Element UI与Element Plus入门
  • 【蓝桥杯选拔赛真题76】python找出元素 第十四届青少年组蓝桥杯python选拔赛真题 算法思维真题解析
  • LeetCode/NowCoder-链表经典算法OJ练习3
  • 使用elementUI的form表单校验时,错误提示位置异常解决方法
  • Qt学习记录(14)线程
  • pdf打开方式怎么设置默认?分享这几种设置方法
  • Ribbon负载均衡(自己总结的)
  • Wpf 使用 Prism 实战开发Day24
  • DA-CLIP论文阅读笔记
  • 如何在VSCode中修改默认终端
  • 如何使用JMeter 进行全链路压测
  • 【Linux取经路】线程同步——条件变量
  • 1、什么是模块化,为什么要模块化?2、衡量模块独立的定性标准是什么?用自己的话表达其含义3、如何理解信息隐藏和局部化?用自己的话或者例子表达其含义
  • 【刷算法】从上往下打印二叉树
  • android 一些 utils
  • angular组件开发
  • css系列之关于字体的事
  • django开发-定时任务的使用
  • JAVA_NIO系列——Channel和Buffer详解
  • jQuery(一)
  • Python连接Oracle
  • React-Native - 收藏集 - 掘金
  • 测试如何在敏捷团队中工作?
  • 关于for循环的简单归纳
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 使用 QuickBI 搭建酷炫可视化分析
  • 首页查询功能的一次实现过程
  • 一个项目push到多个远程Git仓库
  • 云大使推广中的常见热门问题
  • 怎么把视频里的音乐提取出来
  • 智能网联汽车信息安全
  • 最简单的无缝轮播
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (vue)el-cascader级联选择器按勾选的顺序传值,摆脱层级约束
  • (苍穹外卖)day03菜品管理
  • (汇总)os模块以及shutil模块对文件的操作
  • (三)elasticsearch 源码之启动流程分析
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (算法设计与分析)第一章算法概述-习题
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (一) storm的集群安装与配置
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (转)ORM
  • (转)创业家杂志:UCWEB天使第一步
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .net 后台导出excel ,word
  • .net 使用ajax控件后如何调用前端脚本
  • .NET成年了,然后呢?