随想录训练营Day37 | DP - - 509. 斐波那契数, 70. 爬楼梯,746. 使用最小花费爬楼梯
标签: LeetCode闯关记
509. 斐波那契数
class Solution {
public int fib(int n) {
if(n < 2){
return n;
}
int a = 0; int b = 1;//初始化
int c = 0;
for (int i = 2; i <= n; i++) {//dp数组含义
c = a + b;//递归公式 //遍历顺序 从前向后
a = b;
b = c;
}
return c;
}
}
70. 爬楼梯
summary:cf 509. 斐波那契数,进阶处在于需要自己推导递推公式
class Solution {
public int climbStairs(int n) {
if(n <= 2){
return n;
}
int[] stairs = new int[n + 1];//dp数组表示爬到第n阶楼梯有stairs[n]种方法
stairs[1] = 1;//初始化 思考 stairs[0]有没有含义
stairs[2] = 2;
for (int i = 3; i <= n; i++) {
stairs[i] = stairs[i-1] + stairs[i-2];//递推公式
}
return stairs[n];
}
}
746. 使用最小花费爬楼梯
key: 明确题意,递推公式提取抓题
一旦你支付此费用,即可选择向上爬一个或者两个台阶,由此可知,到达第i个位置需要花费的体力与前两个台阶有关。
class Solution {
public int minCostClimbingStairs(int[] cost) {
int len =cost.length;
int[] dp = new int[len + 1];//dp数组的含义: 到达第i个位置需要花费dp[i]
dp[0] = 0;//初始化
dp[1] = 0;//初始化
for (int i = 2; i <= len; i++) {
dp[i] = Math.min(dp[i-1] + cost[i-1],dp[i-2] + cost[i-2] );//递推公式
}
return dp[len];
}
}