总述
1.刷题计划
采用知乎用户"代码随想录"的力扣刷题顺序,题目顺序安排较合理,只需跟着一道一道刷即可。
刷题顺序地址:
GitHub地址:https://github.com/youngyangyang04/leetcode-master 。
Gitee地址:programmercarl/leetcode-master(代码随想录出品)。
2.代码风格
本人目前采用C++刷题(后期也有换Python刷题的一小点可能)。
根据本人写C++的风格:
(1)变量命名采用小驼峰方式,结构体或者类名采用大驼峰方式,函数命名采用下划线方式。
(2)操作符(+ - * / = )左右有空格,分隔符( , 和 ; )前一位没有空格,后一位保持空格。
(3)控制语句(while if for)后面跟一个空格,再接括号。
2.ACM模式、leetcode模式和本地编译运行
首先要说最常见的ACM模式,这是大多数刷题网站和企业面试所采用的模式。就是自己构造输入数据格式,把要需要处理的容器填充好,OJ不会给你任何代码,它只会给你输入样例和输出样例,包括include哪些函数都要自己写,最后也要自己控制返回数据的格式。在这种情况下,我们需要在本地将代码完整地写好并通过所给样例,然后提交之。
而leetcode模式是核心代码模式。就是把要处理的数据都已经放入容器里,可以直接写逻辑。这样就产生了问题:leetcode上的代码如何调试呢?要通过本地编译运行的方式吗?
一般调试就是直接在力扣上打日志,偶尔需要把代码粘到本地来运行添加日志debug一下。在力扣上直接打日志,C++的话想打啥直接cout啥就可以了。
力扣上的代码在本地编译运行的方式,以力扣746举例。在力扣上,我们已经写好核心代码:
class Solution {
public:
int minCostClimbingStairs(vector<int>& cost) {
vector<int> dp(cost.size());
dp[0] = cost[0];
dp[1] = cost[1];
for (int i = 2; i < cost.size(); i++) {
dp[i] = min(dp[i - 1], dp[i - 2]) + cost[i];
}
return min(dp[cost.size() - 1], dp[cost.size() - 2]);
}
};
这是构造了一个类Solution的方法,我们只需在本地把需要的头文件补齐,然后在main函数中构造对应的输入数据,再创建一个solution调用该方法即可。
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
int minCostClimbingStairs(vector<int>& cost) {
vector<int> dp(cost.size());
dp[0] = cost[0];
dp[1] = cost[1];
for (int i = 2; i < cost.size(); i++) {
dp[i] = min(dp[i - 1], dp[i - 2]) + cost[i];
}
return min(dp[cost.size() - 1], dp[cost.size() - 2]);
}
};
int main() {
int a[] = {1, 100, 1, 1, 1, 100, 1, 1, 100, 1};
vector<int> cost(a, a + sizeof(a) / sizeof(int));
Solution solution;
cout << solution.minCostClimbingStairs(cost) << endl;
}