PS:以下代码由C++实现
1.第N个泰波那契数 力扣
class Solution {
public:
int tribonacci(int n)
{
int dp[4]={0};//创建dp表
dp[0]=0;//初始化
dp[1]=1;
dp[2]=1;
for(int i=3;i<=n;i++)
{
dp[i%4]=dp[(i-1)%4]+dp[(i-2)%4]+dp[(i-3)%4];//状态标识+填表顺序
}
return dp[n%4];
}
};
2.三步问题· 力扣
//这题和上一道题差不多
class Solution {
public:
int waysToStep(int n)
{
size_t dp[4]={0};
dp[0]=1;
dp[1]=1;
dp[2]=2;
dp[3]=4;
for(int i=3;i<=n;i++)
{
dp[i%4]=(dp[(i-1)%4]+dp[(i-2)%4]+dp[(i-3)%4])%1000000007;
}
return dp[n%4];
}
};
3.使用最小花费爬楼梯 力扣
class Solution {
public:
int minCostClimbingStairs(vector<int>& cost)
{
int n=cost.size();
vector<int> str(n+1,0);//创建dp表
for(int i=2;i<=n;i++)
{
str[i]=min(cost[i-1]+str[i-1],cost[i-2]+str[i-2]);//状态表示
}
return str[n];//返回值
}
};
4。 解码方法 力扣
class Solution {
public:
int numDecodings(string s)
{
int n=s.size();
vector<int> dp(n+1);
dp[0]=1;//处理后边的情况
dp[1]=s[0]!='0';
for(int i=2;i<=n;i++)
{
if(s[i-1]!='0') dp[i]+=dp[i-1];//处理单独编码的情况
int num=(s[i-2]-'0')*10+(s[i-1]-'0');
if(num>=10&&num<=26) dp[i]+=dp[i-2];
}
return dp[n];
}
};