DAY41
動態規劃理論基礎
還差閆氏分析法沒學完。見B站收藏夾。
前兩題學習初始化方式就好vector<int> dp(N+1);
509斐波那契數
簡單。
- class?Solution?{
- public:
- ????int?fib(int?N)?{
- ????????if?(N?<=?1)?return?N;
- ????????int?dp[2];
- ????????dp[0]?=?0;
- ????????dp[1]?=?1;
- ????????for?(int?i?=?2;?i?<=?N;?i++)?{
- ????????????int?sum?=?dp[0]?+?dp[1];
- ????????????dp[0]?=?dp[1];
- ????????????dp[1]?=?sum;
- ????????}
- ????????return?dp[1];
- ????}
- };
70爬樓梯
簡單。
- class?Solution?{
- public:
- ????int?climbStairs(int?n)?{
- ????????if?(n?<=?1)?return?n;
- ????????int?dp[3];
- ????????dp[1]?=?1;
- ????????dp[2]?=?2;
- ????????for?(int?i?=?3;?i?<=?n;?i++)?{
- ????????????int?sum?=?dp[1]?+?dp[2];
- ????????????dp[1]?=?dp[2];
- ????????????dp[2]?=?sum;
- ????????}
- ????????return?dp[2];
- ????}
- };
746使用最小花費爬樓梯
不會做了,實在想不出來。
代碼隨想錄官方解答:
現在會了。主要是狀態轉移的形式,學一下:
- class?Solution?{
- public:
- ????int?minCostClimbingStairs(vector<int>&?cost)?{
- ????if(cost.size()==2)?return?min(cost[0],cost[1]);
- ????vector<int>?dp(cost.size()+1);
- ????dp[0]=0,dp[1]=0;
- ????for(int?i=2;i<dp.size();i++){
- ????????dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);
- ????}
- ????return?dp[dp.size()-1];
- ????}
- };
54螺旋矩陣
廈大保研夏令營考過,練一練。
終于過了,卡在記錄該位置是否已經走過,用unordered_set, unordered_map顯然都不行。想復雜了,用二維數組bool就好了。
- ????class?Solution?{
- ????public:
- ????????vector<int>?spiralOrder(vector<vector<int>>&?matrix)?{
- ????????????vector<int>?res;
- ????????????int?dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
- ????????????vector<vector<bool>>?flag(matrix.size(),vector<bool>(matrix[0].size(),false));
- ????????????int?size=matrix.size()*matrix[0].size();
- ????????????for(int?x=0,y=0,d=0,k=1;k<=size;k++){
- ????????????????flag[x][y]=true;
- ????????????????res.push_back(matrix[x][y]);
- ????????????????int?a=x+dx[d],b=y+dy[d];
- ????????????????if(a<0||a>=matrix.size()||b<0||b>=matrix[0].size()||flag[a][b]){
- ????????????????????d=(d+1)%4;
- ????????????????????a=x+dx[d],b=y+dy[d];
- ????????????????}
- ????????????????x=a,y=b;
- ????????????}
- ????????????return?res;
- ????????}
- ????};
59螺旋矩陣ii
廈大保研夏令營考過,練一練。ACWING語法基礎課做過,再寫一遍:
還是寫不出來,不知道該怎么利用偏移量去更新。
加油吧:
- class?Solution?{
- public:
- ????vector<vector<int>>?generateMatrix(int?n)?{
- ????int?dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
- ????vector<vector<int>>?res(n,vector<int>(n,0));
- ????int?mi=n*n;
- ????for(int?x=0,y=0,d=0,k=1;k<=mi;k++){
- ????????res[x][y]=k;
- ????????int?a=x+dx[d],b=y+dy[d];
- ????????//撞墻或者走過了,不要漏了“走過”
- ????????if(a<0||a>n-1||b<0||b>n-1||res[a][b]){
- ????????????d=(d+1)%4;
- ????????????a=x+dx[d],b=y+dy[d];
- ????????}
- ????????x=a,y=b;
- ????}
- ????return?res;
- ????}
- };