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

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

[动态规划] (一) 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.lryc.cn/news/210049.html

相关文章:

  • SystemVerilog语法中,在Class中引用层次化信号
  • 磁盘的结构(磁道,扇区,盘面,柱面,物理地址)
  • uni-app集成uni-simple-router,报错:Uncaught ReferenceError: ROUTES is not defined
  • 几个常用的nosql数据库的操作方式
  • 如何使用 nvm-windows 这个工具来管理你电脑上的Node.js版本
  • 公司电脑禁用U盘的方法
  • Elasticsearch 7.X版本常用语法语句
  • Python分享之数学与随机数 (math包,random包)
  • Linux 基本语句_8_C语言_文件控制
  • 博通BCM575系列 RDMA 网卡驱动 bnxt_re 分析(一)
  • ExcelPatternTool 开箱即用的Excel工具包现已发布!
  • Navicat for MySQL 视图创建使用方法
  • 计算机视觉的相机选型
  • 实体店做商城小程序如何
  • sql-50练习题0-5
  • Flutter框架实现登录注册功能,不连接数据库
  • 持续集成部署-k8s-部署利器-Helm
  • 替换所有的问号
  • NCCL后端
  • 【API篇】十、生成Flink水位线
  • 【Javascript】弹出框
  • NSS [鹤城杯 2021]EasyP
  • mysql用户及权限管理(InsCode AI 创作助手)
  • 命令模式——让程序舒畅执行
  • GZ035 5G组网与运维赛题第3套
  • 071:mapboxGL上传含shp的zip文件,在map上解析显示图形
  • python下拉框选择测试
  • 即时编译器JIT
  • npm更新包时This operation requires a one-time password.
  • C++类模板再学习