当前位置: 首页 > 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))

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

相关文章:

  • 单节点11.2.0.3参数文件恢复到RAC11.2.0.4启动失败
  • Windows电脑高颜值桌面便利贴,便签怎么设置
  • 代码随想录35期Day54-Java
  • Ubuntu使用sudo命令
  • 三方语言中调用, Go Energy GUI编译的dll动态链接库CEF
  • Go微服务: Grpc服务注册在Consul的示例(非Go-Micro)
  • Java+Swing+Mysql实现飞机订票系统
  • 2024 rk
  • Java实现多张图片合并保存到pdf中
  • 揭秘智慧校园:可视化技术引领教育新篇章
  • 基础9 探索图形化编程的奥秘:从物联网到工业自动化
  • RPC-----RCF
  • StarRocks中,这些配置项是表属性的一部分
  • Activity->Activity生命周期
  • 乐鑫ESP串口驱动安装,安装cp210x驱动
  • Django缓存
  • Python 元组
  • JAVA面试题大全(十八)
  • 如何利用Firebase Hosting来托管网站
  • 揭秘“循环消费”模式:消费即收益,购物新体验
  • 图片怎样在线改像素大小?电脑快速修改图片大小的方法
  • SELINUX=enforcing时无法启动httpd服务的解决方案(semanage命令以及setroubleshoot-server插件的妙用)
  • 【C++】list的使用方法和模拟实现
  • 【物联网实战项目】STM32C8T6+esp8266/mqtt+dht11+onenet+uniapp
  • Pyhton 二叉树层级遍历
  • Flutter 中的 FadeTransition 小部件:全面指南
  • 缓存存储器:性能提升的关键
  • 『大模型笔记』工程师的LLMs简介!
  • Vue中的常用指令
  • 百度页面奔跑的白熊html、css