【算法挨揍日记】day17——1137. 第 N 个泰波那契数、面试题 08.01. 三步问题

news2025/1/11 6:53:19

 1137. 第 N 个泰波那契数

1137. 第 N 个泰波那契数

题目描述: 

泰波那契序列 Tn 定义如下: 

T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2

给你整数 n,请返回第 n 个泰波那契数 Tn 的值。

 解题思路:

本题很明显

  1. 状态表示dp【i】为第n个泰波那契数,本题是第一种情况,后面的题目我们会不断遇到1,2,3的情况,我们后面再细讲
  2. 而状态转移方程为题目也直接给了出来, Tn+3 = Tn + Tn+1 + Tn+2,状态转移方程: Tn = Tn -1+ Tn-2 + Tn-3
  3. 初始化(防止越界的情况):本题很明显Tn-3的时候当,n小于3的时候会出现越界的情况,因此我们要提前初始化好dp【0】 ,dp【1】,dp【2】
  4. 填表顺序: 左到右
  5. 返回值;dp【n】

细节问题: 

  •  当n<3的时候,就不需要进行Tn = Tn -1+ Tn-2 + Tn-3计算因此就可以直接返回

空间优化问题:

本题如果我们按照上面的写法的话,就需要开辟一个n+1大小的vector数组dp,当我们在计算第n个位置的时候,我们只需要n-1,n-2,n-3的位置,如果前面还有n-4和n-5都不需要的

因此我们就可以直接用三个变量a,b,c来优化,使得空间复杂度为o(1)

解题代码: 

class Solution {
public:
    int tribonacci(int n) {
        if (n == 0)return 0;
        if (n == 1 || n == 2)return 1;
        vector<int>dp(n + 1);
        dp[0] = 0, dp[1] = 1, dp[2] = 1;
        for (int i = 3; i <= n; i++)
            dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3];
        return dp[n];
    }
};

 空间优化后:

class Solution {
public:
    int tribonacci(int n) {
        if (n == 0)return 0;
        if (n == 1 || n == 2)return 1;
        int a = 0, b = 1, c = 1;
        int d = 0;
        for (int i = 3; i <= n; i++)
        {
            d = a + b + c;
            a = b; b = c; c = d;
        }
        return d;
    }
};

面试题 08.01. 三步问题

面试题 08.01. 三步问题

题目描述:

三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。 

 解题思路:

分析一下题目的意思:

当从0号台阶到1号台阶,只有1种方法;

当从0号台阶到2号台阶,我们可以直接从0号台阶蹦到2号台阶,也可以从0-1-2,总共两种解法

当从0号台阶到3号台阶,我们可以从0号直接蹦到3号台阶,也可以0-1-2-3和0-2-3和0-1-3,总共4种解法

 眼尖的同学这个时候以及发现了状态转移方程了,我们注意一下(以到4号台阶为例):我们可以看成从1号到4的方法数+2号到4号的方法数+3号到4号的方法数

  1. 因此我们的状态表示dp【i】就表示到达第i号台阶的方法数
  2. 状态转移方程:

此时有的同学会有一个疑问:就是我从i-2号台阶到i号台阶的时候不是有两种情况:

  • i-2到i
  • i-2先到i-1再到i号台阶 

其实不然:i-2先到i-1的这种情况以及是包含在i-1到i的方法数中

  1. 初始化(防止越界的情况):本题很明显Tn-3的时候当,n小于3的时候会出现越界的情况,因此我们要提前初始化好dp【0】 ,dp【1】,dp【2】
  2. 填表顺序: 左到右
  3. 返回值;dp【n】

 解题代码:

class Solution {
public:
    const int MOD=1e9+7;
    int waysToStep(int n) {
        if(n==1)return 1;
        if(n==2)return 2;
        if(n==3)return 4;
        vector<int>dp(n+1);
        dp[1]=1,dp[2]=2,dp[3]=4;
        for(int i=4;i<=n;i++)
            dp[i]=((dp[i-1]+dp[i-2])%MOD+dp[i-3])%MOD;
        return dp[n];        
    }
};

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

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

相关文章

spark案例分析-搜索引擎日志分析案例

1.业务分析 2.数据截图 3.代码实现&#xff1a; main.py&#xff1a; #cording:utf8 from pyspark import SparkConf, SparkContext from pyspark.storagelevel import StorageLevel from defs import content_jieba, filter_word, append_word, extract_user_and_word from o…

数据结构和算法——图结构

图是一种数据结构&#xff1b; 图 有向图 带权图 邻接矩阵 邻接表相较于邻接矩阵&#xff0c;减少了存储空间&#xff1b; 邻接表 图的深度优先遍历(DFS) 图的广度优先遍历(BFS) 代码&#xff1a; import java.util.ArrayList; import java.util.Arrays; import java.util.L…

【定向征文活动】2023年深圳1024开发者城市聚会活动参会感想征文

深圳1024开发者城市聚会&#xff0c;有奖征文&#xff0c;欢迎大家来参与。 活动介绍 就在2023年10月22日&#xff0c;深圳COC社区与CSDN主办方联合发起了本年度深圳1024开发者城市聚会活动。活动一经发出&#xff0c;收到了小伙伴的热烈反响&#xff0c;一时间报名人数蹭蹭地…

墨西哥专线海运的集装箱尺寸选择

在国际贸易中&#xff0c;海运是一种常见的运输方式&#xff0c;而集装箱作为一种标准化的物流载具&#xff0c;其大小直接影响着货物的装卸和堆垛效率。对于需要通过墨西哥专线海运的客户来说&#xff0c;了解不同尺寸集装箱的优势和适用范围&#xff0c;可以帮助他们更有效地…

Java后端开发——房贷计算器(Ajax版、Json版、等额本息+等额本金)

MVC房贷计算器&#xff08;Ajax版&#xff09; 1.新建一个JavaWeb项目hslcalweb&#xff0c;设置tomcat10。 2.创建房贷计算器JavaBean&#xff1a;HslCalBean.java&#xff0c;增加以下的属性&#xff0c;并生成Getter/Setter方法。 private double total; //贷款额度pr…

Linux安装JumpServer

功能简介在线安装 环境要求&#xff1a;准备一台 2核4G &#xff08;最低&#xff09;且可以访问互联网的 64 位 Linux 主机 以 root 用户执行如下命令一键安装 JumpServer curl -sSL https://resource.fit2cloud.com/jumpserver/jumpserver/releases/latest/download/quick_st…

JAVA毕业设计102—基于Java+Springboot+vue的个人理财管理系统(源码+数据库)

基于JavaSpringbootvue的个人理财管理系统(源码数据库) 一、系统介绍 本系统前后端分离 管理员功能&#xff1a; 登录、注册、添加账单、导出账单、统计分析、个人信息修改、消费对比 二、所用技术 后端技术栈&#xff1a; SpringbootSpringMvcmybatismysql 前端技术栈…

优维低代码实践:父子模型

导语&#xff1a;优维低代码技术专栏&#xff0c;是一个全新的、技术为主的专栏&#xff0c;由优维技术委员会成员执笔&#xff0c;基于优维7年低代码技术研发及运维成果&#xff0c;主要介绍低代码相关的技术原理及架构逻辑&#xff0c;目的是给广大运维人提供一个技术交流与学…

图片怎么做成动态gif?一招简单又高效

如何将静态图片变成gif动态图片&#xff1f;当下&#xff0c;各种各样的gif表情包充斥着我们的日常生活&#xff0c;但是有些gif动图不符合自己的需求&#xff0c;想要自己制作的时候应该怎么办呢&#xff1f;这时候&#xff0c;可以使用gif图片制作&#xff08;https://www.gi…

session和cookie机制

2023.10.23 域对象 先总结一下到目前位置我所了解的域对象&#xff1a; request&#xff08;对应的类名&#xff1a;HttpServletRequest&#xff09; 请求域&#xff08;请求级别的&#xff09; session&#xff08;对应的类名&#xff1a;HttpSession&#xff09; 会话域&am…

ITSource 分享 第1期【在线考试系统】

项目介绍 本期给大家介绍一个问卷调查系统. 一起来看看吧 ! 一 业务介绍 该系统分为以下几个模块: 1.我的问卷 image.png 可以查看创建的所有问卷, 包括 收集中,编辑中,已关闭等状态 2.创建问卷 image.png 问题类型可以选择有多种选择: 3.发布并填写问卷 问卷编辑完成后,即可保…

国内外CDN的发展

当今互联网世界中&#xff0c;内容交付网络&#xff08;Content Delivery Network&#xff0c;CDN&#xff09;已经成为网络加速的不可或缺的工具。CDN技术在国内外得到广泛应用&#xff0c;为了更好地了解CDN的不同之处以及未来的发展趋势&#xff0c;让我们深入探讨这一领域的…

Spring底层原理(三)

Spring底层原理(三) Bean的生命周期 SpringBootApplication public class Application {public static void main(String[] args) {ConfigurableApplicationContext context SpringApplication.run(Application.class, args);context.close();} } ​ Slf4j Component public…

MySQL身份验证绕过漏洞

搭建 vmihub靶场:vulhub靶场搭建与使用_剁椒鱼头没剁椒的博客-CSDN博客 运行漏洞: # 这里要改成自己的 /vulhub-master 存放目录 cd /etc/docker/vulhub-master/mysql/CVE-2012-2122# 关闭防火墙,不然就要放行3306端口 systemctl stop firewalld# 重启 Docker 服务 servic…

C# | Linq基本功 —— 必学的必熟的10个方法

C# Linq基本功 —— 必学的必熟的10个方法 文章目录 C# Linq基本功 —— 必学的必熟的10个方法1. Linq简介1.1 什么是Linq1.2 Linq的优势 2. Linq基本方法2.1 Where方法2.2 Select方法2.3 OrderBy方法2.4 GroupBy方法2.5 Join方法2.6 Any方法2.7 All方法2.8 First方法2.9 Skip方…

1024勋章

&#x1f338;关于重阳节的一些发疯日常&#xff08;昨天的聊天记录&#xff0c;今天发系列&#xff09;&#x1f605; &#x1f338;没错&#xff0c;发出来单纯觉得好玩儿&#x1f609;(为了1024勋章&#x1f60f;)芜湖&#xff01;

Kepware带你玩转IEC60870-104驱动

随着越来越多电力设备自动化程度的不断提高以及OPC协议的广泛应用&#xff0c;越多客户倾向于使用更为方便、快捷的方式去获取数据&#xff0c;IEC60870-5-104协议作为一个标准的电子自动化协议&#xff0c;在电力自动化现场应用非常广泛。 本文介绍KEPServerEX的IEC-104驱动&…

WeakMap 弱引用 不会被GC所考量

WeakMap是一种特殊的Map数据结构&#xff0c;只能以引用作为key&#xff0c;并且不会阻止其被垃圾回收。WeakMap的使用如下&#xff1a; 1. 创建WeakMap对象&#xff1a; const weakMap new WeakMap();2. 添加键值对&#xff1a;使用set()方法向WeakMap中添加键值对。注意这里…

c++ 模版的一些注意问题

声明和定义不可分离 举个例子&#xff1a; 定义一个Stack.h: 这里放声明 #include<iostream>using namespace std;template<class T> T Add(const T& left, const T& right);定义一个Stack.cpp, 这里面放定义: template<class T> T Add(const T&a…

虚拟机VMware Workstation Pro安装配置使用服务器系统ubuntu-22.04.3-live-server-amd64.iso

虚拟机里安装ubuntu-23.04-beta-desktop-amd64开启SSH(换源和备份)配置中文以及中文输入法等 ​一、获取Ubuntu服务器版 获取Ubuntu服务器版 二、配置虚拟机 选择Custom(advanced)&#xff1a; 选择Workstation 17.x: 选择“I will install the operating system later.”…