DAY37 动态归化Ⅰ基础题目
509. 斐波那契数 - 力扣(LeetCode)
class Solution {
public:
int fib(int n) {
if(n<=1) return n;
int dp[2];
dp[0]=0;
dp[1]=1;
int sum=0;
for(int i=2;i<=n;i++){
sum = dp[0]+dp[1];
dp[0]=dp[1];
dp[1]=sum;
}
return sum;
}
};
70. 爬楼梯 - 力扣(LeetCode)
这里把dp的大小初始化为n+1是因为这样就可以直接用索引 1~n 来表示规模为 i 的子问题。
也保证索引dp[n]是合法的。
class Solution {
public:
int climbStairs(int n) {
if(n<=1) return n;
vector<int>dp(n+1);
dp[1]=1;
dp[2]=2;
for(int i=3;i<=n;i++){
dp[i]=dp[i-1]+dp[i-2];
}
return dp[n];
}
};
746. 使用最小花费爬楼梯 - 力扣(LeetCode)
先确定dp[i]表示的意义、dp[i]有哪几个来源途径?不同的来源如何选择?初始化条件。
确定递推公式、遍历顺序。
class Solution {
public:
int minCostClimbingStairs(vector<int>& cost) {
vector<int>dp(cost.size()+1);
dp[0]=0;
dp[1]=0;
for(int i=2;i<=cost.size();i++){
dp[i]=dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);
}
return dp[cost.size()];
}
};
//1 dp[i] 爬到i个台阶的最小花费
//有两个途径获dp[i] dp[i-1] dp[i-2]
//dp[i]=dp[i-1]+cost[i-1];
//dp[i]=dp[i-2]+cost[i-2];
//dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);
//dp[0]=0;dp[1]=0;