本题题目链接备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://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;}
};