51 爬楼梯

news2024/11/23 15:15:33

爬楼梯

    • 题解1 dp
      • 省点空间——斐波那契数列
    • 题解2 矩阵快速幂(适合n小,重点学习方法)

假设你正在爬楼梯。需要 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 阶

提示:

  • 1 <= n <= 45

题解1 dp

class Solution {
public:
    int climbStairs(int n) {
        vector<int> dp(n+1, 0);
        dp[0] = 1;
        dp[1] = 1;
        int i = 2;
        while(i < n+1){
            dp[i] = dp[i-1] + dp[i-2];
            i ++;
        }
        return dp[n];
    }
};

在这里插入图片描述

省点空间——斐波那契数列

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

在这里插入图片描述

题解2 矩阵快速幂(适合n小,重点学习方法)

class Solution {
public:
    vector<vector<long long>> multiply(vector<vector<long long>> &a, vector<vector<long long>> &b) {
    	// size和 矩阵a*b的维度有关
        vector<vector<long long>> c(2, vector<long long>(2));
        for (int i = 0; i < 2; i++) {
            for (int j = 0; j < 2; j++) {
                c[i][j] = a[i][0] * b[0][j] + a[i][1] * b[1][j];
            }
        }
        return c;
    }

    vector<vector<long long>> matrixPow(vector<vector<long long>> a, int n) {
   	 // |ret| = 1
        vector<vector<long long>> ret = {{1, 0}, {0, 1}};
        while (n > 0) {
        // 奇数,存着
            if ((n & 1) == 1) {
                ret = multiply(ret, a);
            }
            // 快速幂:n/2-a*a
            n >>= 1;
            a = multiply(a, a);
        }
        return ret;
    }

    int climbStairs(int n) {
        vector<vector<long long>> ret = {{1, 1}, {1, 0}};
        vector<vector<long long>> res = matrixPow(ret, n);
        return res[0][0];
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1091079.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++特性——命名空间、I/O流以及缺省参数

C特性 文章目录 C特性1. 写在前面2. 命名空间2.1 命名空间的嵌套2.2 命名空间的完全展开2.3 命名空间的指定展开 3. C的I/O流4. 缺省参数4.1 使用缺省参数的注意事项 1. 写在前面 可以认为&#xff0c;C的语法和语义基本上包含了C语言的所有内容。二者之间的关系大致可以用下图…

十六、代码校验(4)

本章概要 调试 使用 JDB 调试图形化调试器 调试 尽管聪明地使用 System.out 或日志信息能给我们带来对程序行为的有效见解&#xff0c;但对于困难问题来说&#xff0c;这种方式就显得笨拙且耗时了。 你也可能需要更加深入地理解程序&#xff0c;仅依靠打印日志做不到。此时…

【牛客面试必刷TOP101】Day8.BM33 二叉树的镜像和BM36 判断是不是平衡二叉树

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;牛客面试必刷TOP101 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01;&…

2015架构案例(五十一)

第5题 【说明】某信息技术公司计划开发一套在线投票系统&#xff0c;用于为市场调研、信息调查和销售反馈等业务提供服务。该系统计划通过大量宣传和奖品鼓励的方式快速积累用户&#xff0c;当用户规模扩大到一定程度时&#xff0c;开始联系相关企业提供信息服务&#xff0c;并…

关于RNNoise、webrtc_ns、三角带通滤波器、对数能量

语音特征参数MFCC提取过程详解 其中讲解了&#xff1a;三角带通滤波器 、计算每个滤波器组输出的对数能量、对数能量、经离散余弦变换&#xff08;DCT&#xff09;得到MFCC系数 推荐阅读某乎这位大佬的全部文章&#xff1a; 下面是几篇出自这位大佬的很好的文章&#xff1a; …

MySQL进阶(回望MySQL)——从数据资产谈起 MySQL的DOS命令、常用数据类型、SQL语句的分类 SQL函数

前言 SQL&#xff08;Structured Query Language&#xff09;是一种用于管理关系型数据库的标准化语言&#xff0c;它用于定义、操作和管理数据库中的数据。SQL是一种通用的语言&#xff0c;可以用于多种关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;如MySQ…

小程序需带参数跳转

1、需要生成二维码的数据 直接在浏览器中替换成自己的appid&#xff0c;secret及可生成一个access_token https://api.weixin.qq.com/cgi-bin/token?grant_typeclient_credential&appidwxxxxx&secretxxxxx用access_token https://api.weixin.qq.com/wxa/getwxacode…

【LeetCode热题100】--215.数组中的第K个最大元素

215.数组中的第K个最大元素 本题主要是返回数组排序之后的倒数第k个位置 方法一&#xff1a;基于快速排序 思路和算法 我们可以用快速排序来解决这个问题&#xff0c;先对原数组排序&#xff0c;再返回倒数第 k 个位置&#xff0c;这样平均时间复杂度是 O(nlog⁡n)&#xff0…

管程的介绍

一、概述 1.引入原因 信号量机制实现同步存在编写程序困难&#xff0c;易出错问题 2.概念 是一种实现进程互斥与同步的机制&#xff0c; 3.组成 共享数据结构说明、对数据结构操作的过程/函数、初始化共享数据、管程名&#xff1b; 4.特点 类似类的结构(数据对象相关操…

IDEA通过Docker插件部署SpringBoot项目

1、配置Docker远程连接端口 找到并编辑服务器上的docker.service文件。 vim /usr/lib/systemd/system/docker.service在下面ExecStart替换成下面的 ExecStart/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock2.重启docker systemctl daemon-reload s…

强化学习(Reinforcement Learning)与策略梯度(Policy Gradient)

写在前面&#xff1a;本篇博文的内容来自李宏毅机器学习课程与自己的理解&#xff0c;同时还参考了一些其他博客(懒得放链接)。博文的内容主要用于自己学习与记录。 1 强化学习的基本框架 强化学习(Reinforcement Learning, RL)主要由智能体(Agent/Actor)、环境(Environment)、…

CSS padding(填充)

CSS padding&#xff08;填充&#xff09;是一个简写属性&#xff0c;定义元素边框与元素内容之间的空间&#xff0c;即上下左右的内边距。 padding&#xff08;填充&#xff09; 当元素的 padding&#xff08;填充&#xff09;内边距被清除时&#xff0c;所释放的区域将会受到…

最新Base64注入攻击和代码分析技术

点击星标&#xff0c;即时接收最新推文 本文选自《web安全攻防渗透测试实战指南&#xff08;第2版&#xff09;》 点击图片五折购书 Base64注入攻击 Base64注入攻击的测试地址在本书第2章。 从URL中可以看出&#xff0c;参数ID经过Base64编码&#xff08;“%3d”是“”的URL编码…

Vulnhub系列靶机-Raven2

文章目录 Raven2 渗透测试1. 信息收集1.1 主机探测1.2 端口扫描1.3 目录爆破 2. 漏洞探测3. 漏洞利用3.1 msfconsole3.2 交互式shell 4. 权限提升 Raven2 渗透测试 1. 信息收集 1.1 主机探测 arp-scan -l1.2 端口扫描 nmap -p- -A 192.168.188.213通过nmap工具进行端口扫描…

LeetCode【54】螺旋矩阵

题目&#xff1a; 思路&#xff1a; 参考&#xff1a;https://blog.csdn.net/ShiXiAoLaNga/article/details/124975293 上下左右&#xff0c;四个游标&#xff0c;代表边界&#xff0c;每次遍历完一行或一列都移动游标&#xff1b;直到 down > up、right < left&#xf…

使用hugging face开源库accelerate进行多GPU(单机多卡)训练卡死问题

目录 问题描述及配置网上资料查找1.tqdm问题2.dataloader问题3.model(input)写法问题4.环境变量问题 我的卡死问题解决方法 问题描述及配置 在使用hugging face开源库accelerate进行多GPU训练&#xff08;单机多卡&#xff09;的时候&#xff0c;经常出现如下报错 [E Process…

key value存储到底有什么优势?

昨天被问到Key value存储到底有什么优势&#xff0c;当然脑子也没太转过来。正好昨天学习了B树和LSM树的差别&#xff0c;并了解到LSM树底层是可以用sstable来实现的。sstable包含一个数据块列表和一个索引块&#xff0c;数据块存储有序键镇对&#xff0c;索引块存储所有数据块…

navicate安装教程

Navicat是一款数据库管理工具&#xff0c;它支持多种数据库类型&#xff0c;包括MySQL、MariaDB、Oracle、SQL Server等。Navicat具有直观的图形用户界面和易于使用的功能&#xff0c;可以让用户轻松地管理和操作数据库。 首先&#xff0c;Navicat提供了一种简单的方法来连接到…

Linux gcc和make学习

文章目录 GCCgcc的安装gcc的工作流程 makefilemakefile的规则工作原理自动生成makefile的变量自定义变量预定义变量自动变量 模式匹配函数wildcard函数patsubst函数 伪声明 GCC gcc全程是&#xff08;GNU compiler collection CNU编译器套件&#xff09;&#xff0c;是由GNU开发…

【汇编语言学习笔记】一、基础知识

引言 汇编语言是直接在硬件之上工作的编程语言&#xff0c;首先要了解硬件系统的结构&#xff0c;才能有效的应用汇编语言对其编程。 1.1机器语言 机器语言是机器指令的集合。 机器指令展开来讲就是一台机器可以正确执行的命令。 1.2汇编语言 汇编语言的主体是汇编指令。 …