动态规划--第N个泰波那契数

本文介绍了如何使用动态规划解决N次泰波那契数问题,包括状态表示、状态转移方程、初始化、填表顺序和返回值的理解。并提供了两种方法,一种是常规填表法,另一种是空间优化版本。

本题题目链接备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/n-th-tribonacci-number/

 个人主页:Lei宝啊 

愿所有美好如期而遇


动态规划,如果真要清楚理解的话,可能一开始学习不太可能,专有名词太多,我们就先简单理解。

状态表示,状态转移方程,初始化,填表顺序,返回值,也就分这么几个步骤,也许你不理解,那就对了,我们分开简单说。

状态表示,也就是建一个数组,我们叫做dp表(动态规划缩写),数组每个值都对应一个状态,本题来说,就是T1表示第一个泰波那契数,T2就表示第二个。我们如何得到他的状态,经验+题目分析(这不是废话嘛),简单来说,多做题,上百道就差不多有感觉了(滑稽)。

状态转移方程,就是dp[i]等于什么,本题已经给出。

初始化,给初始的几个状态赋值。

填表顺序,就是根据状态转移方程填dp表。

返回值,返回哪个位置的值呢?由你决定。

class Solution {
public:
    int tribonacci(int n) 
    {
        vector<int> v(n+3);
        v[0] = 0,v[1] = v[2] = 1;

        for(int i=3; i<=n; i++)
        {
            v[i] = v[i-1] + v[i-2] + v[i-3];
        }

        return v[n];
    }
};

下面这个就是对空间的优化,还是挺舒服的。 

class Solution {
public:
    int tribonacci(int n) 
    {
        int result = 0;
        int a = 0, b = 1, c = 1;

        if(n == 0) return 0;
        if(n == 1 || n == 2) return 1;

        for(int i=2; i<n; i++)
        {
            result = a + b + c;
            a = b;
            b = c;
            c = result;
        }

        return result;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lei宝啊

觉得博主写的有用就鼓励一下吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值