509.斐波那契数
题目链接: https://leetcode.cn/problems/fibonacci-number/description/
思路:
当前这个数由上一个数和上上个数推导而来。所以我们每次记录两个数,用来推导下一个就行了。遍历顺序从2到n,当n小于等于2时可直接输出结果。
核心代码:
cpp
class Solution {
public:
int fib(int n) {
if(n<=1) return n;
int a,b,c;
a=0;b=1;
for(int i=2;i<=n;i++){
c=a+b;
a=b;
b=c;
}
return c;
}
};
70.爬楼梯
题目链接: https://leetcode.cn/problems/climbing-stairs/description/
思路:
我们考虑到达第n阶的方法,由于每次只能上一阶或者两阶,因此第n阶只能由第n-1阶或第n-2阶到达,即到达第n阶的方法 = 到达第n-2阶的方法 + 到达第n-1阶的方法。
写成方程即 dp[i]=dp[i-2]+dp[i-1];
从方程我们知道求当前的数要用到之前的两个数字,所以我们从0遍历到n。由于我们每次只用到两个数字,因此开两个变量记录即可。
核心代码:
cpp
class Solution {
public:
int climbStairs(int n) {
if(n<=2) return n;
int a,b,c;
a=1;b=2;
for(int i=3;i<=n;i++){
c=a+b;
a=b;
b=c;
}
return c;
}
};
746.使用最小花费爬楼梯
题目链接: https://leetcode.cn/problems/min-cost-climbing-stairs/description/
思路:
我们考虑到达第n阶的方法,由于每次只能上一阶或者两阶,因此第n阶只能由第n-1阶或第n-2阶到达,即到达第n阶的最小花费 = min( 到达第n-2阶的最小花费+cost[n-2] , 到达第n-1阶的最小花费+cost[n-1] )。
写成方程即 dp[i] = min( dp[i-2]+cost[i-2] , dp[i-1]+cost[i-1] );
从方程我们知道求当前的数要用到之前的两个数字,所以我们从0遍历到n。由于我们每次只用到两个数字,因此开两个变量记录即可。
核心代码:
cpp
class Solution {
public:
int minCostClimbingStairs(vector<int>& cost) {
int n=cost.size();
int a,b,c;
a=b=0;
for(int i=2;i<=n;i++){
c=min(a+cost[i-2],b+cost[i-1]);
a=b;
b=c;
}
return c;
}
};
今日总结
今日学习时长1h,今天题目挺简单的,没花什么时间,接着去忙其他工作。