码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 1137. 第N个泰波那契数- 力扣


    1. 题目

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

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

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

    2. 示例

    3. 分析

    1. 状态表示:dp[i]表示:第i个泰波那契数的值

    2. 状态转移方程:题目已经给了,为 Tn+3 = Tn + Tn+1 + Tn+2,修改一下为:dp[i] = dp[i-1] + dp[i-2] + dp[i-3]

    3. 初始化:题目也已经给了,为 T0 = 0, T1 = 1, T2 = 1,修改一下为:dp[0] = 0,  dp[1] = d[2] = 1

    4.填表顺序:填写一个状态时,需知道表里前三个的状态,所以根据方程可知填dp表的顺序就为 从左至右


    1. class Solution {
    2. public:
    3. int tribonacci(int n) {
    4. if(n == 0) return 0;
    5. if(n == 1 || n == 2) return 1;
    6. vector<int> dp(n+1);
    7. dp[0] = 0, dp[1] = dp[2] = 1;
    8. for(int i = 3; i <= n; i++)
    9. dp[i] = dp[i-1]+dp[i-2]+dp[i-3];
    10. return dp[n];
    11. }
    12. }

    我们可以优化一下:我们不难发现对于dp[i]的值,我们只需用到前三个的值就可以了,并不需要前三个之前的值。例如dp[6]=dp[5]+dp[4]+dp[3],我们求dp[6]时是不需要用到dp[0]、dp[1]、dp[2]的,即dp[0]、dp[1]、dp[2]对于dp[6]是可以舍弃掉的。

    结论:求某个状态时,仅需要有效的状态,对于不用的就可以舍弃掉。

    我们就可以使用滚动数组进行优化。我们使用abcd四个变量分别进行赋值 a = 0, b = 1, c = 1, d = 0,然后在这个数组内一步一步走就可以了。

    怎么走呢?交换彼此的值就行,有两种交换选项:

    1. 从左往右走: a = b, b = c, c = d 为正确走法
    2. 从右往左走:c = d, b = c, a = b
      错误走法:c = d再b = c后,b的值就为d了,而不是还没交换前的c了。
    1. class Solution {
    2. public:
    3. int tribonacci(int n) {
    4. if(n == 0) return 0;
    5. if(n == 1 || n == 2) return 1;
    6. // 空间优化
    7. int a = 0, b = 1, c = 1, d = 0;
    8. for(int i = 3; i <= n; i++)
    9. {
    10. d = a + b + c;
    11. a = b; b = c; c = d;
    12. }
    13. return d;
    14. }
    15. };
  • 相关阅读:
    [附源码]java毕业设计基于Java的护肤品网站
    爱家房产网站源码 爱家房产网商业版 微信互动营销整合+手机触屏版+经纪人分销
    数论 --- 欧拉函数、筛法求欧拉函数、欧拉定理、费马小定理详细证明
    复制粘贴(一):copy paste 事件
    2021年数学建模国赛A题优秀论文(Word)(FAST”工作抛物面的优化设计)
    新媒体时代如何做好新型的网络口碑营销?
    【Flutter 布局】001-Flex 布局
    Task Computing【动态规划_牛客】
    数据链路层协议
    网络爬虫学习笔记 1 HTTP基本原理
  • 原文地址:https://blog.csdn.net/weixin_61522065/article/details/136665342
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号