Se le da un costo de matriz de enteros, donde costo[i] es el costo de subir el i-ésimo escalón de las escaleras. Una vez que pague esta tarifa, puede optar por subir un tramo de escaleras o dos.
Puede elegir comenzar a subir las escaleras desde el escalón con el subíndice 0 o el subíndice 1.
Calcule y devuelva el costo mínimo para llegar a la parte superior de las escaleras.
Ejemplo 1
Entrada: costo = [10,15,20]
Salida: 15
Explicación: Comenzará desde el paso con el índice 1.
Paga 15 y sube dos escalones hasta la parte superior de las escaleras.
El costo total es de 15.
Ejemplo 2
Entrada: costo = [1,100,1,1,1,100,1,1,100,1]
Salida: 6
Explicación: Comenzará desde el paso con el índice 0.
Paga 1 y sube dos escalones para llegar al escalón con subíndice 2.
Paga 1 y sube dos escalones hasta el escalón marcado como 4.
Paga 1 y sube dos escalones para llegar al escalón con subíndice 6.
Paga 1 y sube un escalón para llegar al escalón con subíndice 7.
Paga 1 y sube dos escalones para llegar al escalón con subíndice 9.
Paga 1, sube un escalón para llegar a la parte superior de las escaleras.
El costo total es de 6.
desatar:
método uno
class Solution {
public:
int minCostClimbingStairs(vector<int>& cost) {
//创建dp数组
vector<int> dp(cost.size()+1);
//初始化
dp[0]=dp[1]=0;
//填表
for(size_t i=2;i<=cost.size();i++)
{
dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);
}
//返回值
return dp[cost.size()];
}
};
Método dos
class Solution {
public:
int minCostClimbingStairs(vector<int>& cost) {
int len=cost.size();
//创建dp数组
vector<int> dp(len);
//初始化
dp[len-1]=cost[len-1];
dp[len-2]=cost[len-2];
//数组赋值
for(int i=len-3;i>=0;i--)
{
dp[i]= min(dp[i+1]+cost[i],dp[i+2]+cost[i]);
}
//返回值
return min(dp[0],dp[1]);
}
};