[动态规划] (一) LeetCode 1137.第N个泰波那契数

news2024/11/29 10:54:38

[动态规划] (一) LeetCode 1137.第N个泰波那契数

文章目录

      • [动态规划] (一) LeetCode 1137.第N个泰波那契数
        • 题目解析
        • 解题思路
          • 状态表示
          • 状态转移方程
          • 初始化和填表顺序
          • 返回值
        • 代码实现
        • 总结
        • 空间优化
          • 代码实现
        • 总结

1137. 第 N 个泰波那契数

题目解析

image-20231028220409948

解题思路
状态表示

(1) 题目要求

(2) 经验+题目要求

(3) 分析问题发现重复子问题

dp[i]的含义:dp[i]表示第N个泰波纳切数。

状态转移方程

由题意得:

dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
初始化和填表顺序

初始化:填表时保证不越界

填表顺序:保证之前的状态已经计算过了,所以是从左向右

返回值

题目要求+状态表示

返回第n个泰波那契数:return dp[n]。

代码实现
class Solution {
public:
    int tribonacci(int n) {
        //处理边界情况
        if(n == 0) return 0;
        else if(n == 1 || n == 2) return 1;
        //1.创建dp表
        vector<int> dp(n+1);
        //2.初始化
        dp[0] = 0, dp[1] = 1, dp[2] = 1;
        for(int i = 3; i <= n; i++)
        {
            //3.填表
            dp[i] = dp[i-1] + dp[i-2] + dp[i-3];
        }
        //返回值
        return dp[n];
    }
};

image-20231028215404127

总结

细节1:注意处理边界情况。

细节2:开辟容器时初始化(n+1)个空间,数组下标从0开始。

细节3:遍历完整的n,i <= n

时间复杂度:O(n)

空间复杂度:O(n)

空间优化

滚动数组:

dp[3] = dp[2] + dp[1] + dp[0]

dp[4] = dp[3] + dp[2] + dp[1],没有使用到dp[0]

dp[5] = dp[4] + dp[3] + dp[2],没有使用到dp[1], dp[0]。

造成了空间的浪费,所以我们可以定义4个变量a, b, c, d来循环写入dp[i]。

a = 0, b = 1, c = 1, d = a+b+c

a = b, b = c, c = d, d = a+b+c(如果反过来,就会让 a = b = c 和d一样了)

代码实现
class Solution {
public:
    int tribonacci(int n) {
        if(n == 0) return 0;
        else 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;
    }
};

image-20231028221407298

总结

时间复杂度:O(N) 空间复杂度:O(1)

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

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

相关文章

【菜菜研科研小BUG记录】【Latex写作方面1】不定期更新

Latex写作方面&#xff1a; 项目相关背景&#xff1a; &#xff08;1&#xff09;VscodeTexlive环境&#xff0c;bib文件出现报错 &#xff08;2&#xff09;bib报错出现引文重复现象&#xff0c;这个要通过二分法查找重复的引文位置&#xff0c;比较麻烦&#xff0c;比较难找…

linux常用基本命令大全的使用(三)

&#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首页&#xff1a;CSDN主页石马农青衿 &#x1f304;每日一句&#xff1a;努力一点&#xff0c;优秀一点 &#x1f4d1;前言 本文主要是linux常用基本命令面试篇文章&#xff0c;如果有什么…

【vue3】样式穿透、完整新特性、动态css、css-module

一、样式穿透 vue2里面使用 /deep/ vue3里面使用 :deep() :deep(.el-input__inner){background-color: red; }二、完整新特性 :slotted() //parent.vue <template><div><p>这是父级</p><span></span><A><p class"red"…

线扫相机DALSA--常见问题一:软件安装顺序

1.软件安装顺序 先安装&#xff1a;Sapera_LT_SDK&#xff0c;后安装Xtium-CL MX4驱动。 2.初次安装CamExpert&#xff0c;重启电脑后未找到相机 Settings(搜索协议)配置完毕后&#xff0c;需点击Detect Camera(一键查找相机)按钮&#xff0c;搜索相机。第一次查找相机耗时会略…

电脑有自带的录屏功能吗win7

win7有自带的录屏软件&#xff0c;名字叫“问题步骤记录器”&#xff0c;可以实现将每一步操作截成图片&#xff0c;并自动配以相关文字说明的功能。打开记录器的方法&#xff1a;1、按“WinR”键&#xff0c;打开“运行”窗口&#xff1b;2、在“运行”窗口中&#xff0c;输入…

推荐免费的文本转语音工具TTS-Vue【且开源】

标签&#xff1a; 文本转语音&#xff1b; 免费文本转语音软件&#xff1b; 网上有很多文本转语音的工具&#xff0c;但收费具多。 这里推荐一个免费的文本转语音工具。 不需要注册&#xff0c;下载安装就可以使用。且代码开源。 TTS-Vue 软件主页&#xff1a;https://loker…

【uniapp】uview1.x使用upload上传图片

和2.x不同的是&#xff0c;要用 action 来配置后端上传图片的接口地址&#xff1b; 再来一些配置项的命名有所不同&#xff0c;一般1.x的命名用 -&#xff0c;2.x的命名使用小驼峰&#xff1b; 1.x 的上传会自带删除时的提示框&#xff0c;2.x 没有&#xff1b; 重要的几个配置…

python下拉框选择测试

把下拉选择的值得打印出来&#xff1a; import tkinter as tk def on_select(event): # 当选择下拉框中的一项时&#xff0c;此函数将被调用 selected event.widget.cget("text") # 获取选中的文本 print(f"You selected: {selected}") # 打印选中…

Android JNI/NDK 入门从一到二

1. 前言 最基础的创建JNI接口的操作&#xff0c;可以直接看这篇文章 : 第一个Android JNI工程&#xff0c; 本文会基于掌握创建JNI接口的操作的基础之上&#xff0c;来入门JNI/NDK。 2. 在JNI中打印日志 2.1 添加log模块 记得CMake中有log模块&#xff0c;不然编译不过 ta…

Vue 数据绑定 和 数据渲染

目录 一、Vue快速入门 1.简介 : 2.MVVM : 3.准备工作 : 二、数据绑定 1.实例 : 2.验证 : 三、数据渲染 1.单向渲染 : 2.双向渲染 : 一、Vue快速入门 1.简介 : (1) Vue[/vju/]&#xff0c;是Vue.js的简称&#xff0c;是一个前端框架&#xff0c;常用于构建前端用户…

【SEC 学习】美化 Linux 终端

一、步骤 1. 进入 /etc/bash.bashrc vim /etc/bash.bashrc2. 重新加载 bash.bashrc source /etc/bash.bashrc二、各参数指标 符号含义\u当前用户的账号名称\h仅取主机的第一个名字&#xff0c;如上例&#xff0c;则为fc4&#xff0c;.linux则被省略\H完整的主机名称。例如&…

python之计算平面点集的的面积

在当今数据驱动的世界中&#xff0c;计算平面点集的最小外接轮廓面积被广泛应用于各种实际场景中。它是一项重要而魅力十足的任务&#xff0c;旨在找到一个最小的矩形或多边形区域&#xff0c;能够完全包围给定的离散点集。这个看似简单的问题背后隐藏着许多挑战&#xff0c;需…

034-第三代软件开发-自定义Slider(一)

第三代软件开发-自定义Slider(一) 文章目录 第三代软件开发-自定义Slider(一)项目介绍自定义Slider(一)总结一下 关键字&#xff1a; Qt、 Qml、 Slider、 position、 关键字5 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&#xff08;Qt Met…

基本微信小程序的体检预约小程序

项目介绍 我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;体检预约系统小程序被用户普遍使用&#xff0c;为方便用户…

linux-vsftp虚拟多用户

目录 1.安装vsftp 2.安装DB工具&#xff0c;能转化普通文件为vsftpd识别数据库加密文件 3.创建登录虚拟用户的名单 4.加密文件 6.需要修改vsftpd的配置文件 7.修改vsftp的配置文件&#xff0c;加载支持虚拟用户模式 8.针对不同用户开启不同权限 9.重启服务 10.测试 安…

[动态规划] (二) LeetCode 面试题 08.01.三步问题

[动态规划] (二) LeetCode 面试题 08.01.三步问题 文章目录 [动态规划] (二) LeetCode 面试题 08.01.三步问题题意解析解题思路1.状态表示2.状态转移方程3.初始化和填表顺序4.返回值 代码实现总结 面试题 08.01. 三步问题 题意解析 (1) 小孩可以跳1-3阶台阶 (2) 结果很大&…

革新技术,释放创意 :Luminar NeoforMac/win超强AI图像编辑器

Luminar Neo&#xff0c;一个全新的AI图像编辑器&#xff0c;正以其强大的功能和独特的创意引领着图像编辑的潮流。借助于最新的AI技术&#xff0c;Luminar Neo为用户提供了无限可能的图像编辑体验&#xff0c;让每一个想法都能被精彩地实现。 Luminar Neo的AI引擎强大而高效&…

035-第三代软件开发-Qt属性系统

第三代软件开发-Qt属性系统 文章目录 第三代软件开发-Qt属性系统项目介绍Qt属性系统目的属性与类成员使用声明属性的要求 动态属性属性和自定义类型总结一下 关键字&#xff1a; Qt、 Qml、 Q_PROPERTY 、 setProperty、 属性 项目介绍 欢迎来到我们的 QML & C 项目&a…

Winsows QT5.15安装教程——组件务必要选上Sources

文章目录 1 下载地址2 开始安装2.1 选择一个磁盘空间大的位置安装QT&#xff0c;安装完可能会占用30G以上的空间2.2 选择组件2.3 接下来进入傻瓜式安装 3 QT 组件一览3.1 “Preview”分类下的开发组件3.1.1 编译器模块。3.1.2 “Qt ”分类下的开发组件 1 下载地址 https://www…

双向链表的初步练习

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇: Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”…