-
今日学习的文章链接,或者视频链接
-
自己看到题目的第一想法
-
看完代码随想录之后的想法
509
从上到下带memo的dp:
class Solution {
public:
vector<int> memo;
Solution() {
memo = vector<int>(31, -1);
}
int fib(int n) {
return dp(n);
}
int dp(int n){
if(n==0) return 0;
if(n==1) return 1;
if(memo[n]==-1){
memo[n] = dp(n-1)+dp(n-2);
}
return memo[n];
}
};
从下到上dp:
class Solution {
public:
int fib(int n) {
if(n <= 0) {
return 0;
}
if(n == 1) {
return 1;
}
vector<int> dp(n+1);
dp[0] = 0;
dp[1] = 1;
for(auto i = 2;i<=n;i++){
dp[i] = dp[i-1]+dp[i-2];
}
return dp[n];
}
};
70
class Solution {
public:
int climbStairs(int n) {
//dp[i],i级台阶有dp[i]种不同的方法可以爬到楼顶
//dp[i] = dp[i-1]+dp[i-2]
if(n<=1){
return n;
}
vector<int> dp(n+1);
dp[0] = 1;
dp[1] = 1;
for(int i = 2;i<=n;i++){
dp[i] = dp[i-1]+dp[i-2];
}
return dp[n];
}
};
746
注意可以从0阶台阶或1阶台阶开始跳,对应于dp[0]=0,dp[1]=0
class Solution {
public:
int minCostClimbingStairs(vector<int>& cost) {
//dp[i]:到i级台阶的最低花费为dp[i]
//return min(dp[0],dp[1])
//dp[i] = min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])
int n = cost.size();
if(n==1){
return cost[0];
}
if(n==2){
return min(cost[0],cost[1]);
}
vector<int> dp(n+1);
dp[0] = 0;
dp[1] = 0;
for(int i=2;i<=n;i++){
dp[i] = min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);
}
return dp[n];
}
};
-
自己实现过程中遇到哪些困难
-
今日收获,记录一下自己的学习时长