zoukankan      html  css  js  c++  java
  • 螺旋矩阵(数组)问题(网易考点)

    >>>输入一个二维数组,要求顺时针打印数组内容

    题目链接https://leetcode-cn.com/problems/spiral-matrix/

    题目本身不难,但是逻辑必须想清楚,多次吃亏,这次一定要牢记

    (以下代码是将结果存在一维数组中返回)

     1 int num,sum=0;
     2 vector<int> spiralOrder(vector<vector<int>>& ma) {
     3     num=ma.size()*ma[0].size();
     4     int i,j,x=0,y=0;
     5     int sizex=ma.size(),sizey=ma[0].size();
     6     vector<int> res;
     7     while(sum<num){
     8         for(i=x,j=y;j<sizey-y;j++){//→→→
     9             res.push_back(ma[i][j]);
    10             if((++sum)>=num) {
    11                 return res;
    12             } 
    13         }
    14         x=i+1;y=j-1;
    15         for(i=x,j=y;i<sizex-x+1;i++){//↓↓↓
    16             res.push_back(ma[i][j]);
    17             if((++sum)>=num) {
    18                 return res;
    19             } 
    20         }
    21         x=i-1;y=j-1;
    22         for(i=x,j=y;j>=sizey-y-2;j--){//←←←
    23             res.push_back(ma[i][j]);
    24             if((++sum)>=num) {
    25                 return res;
    26             } 
    27         }
    28         x=i-1;y=j+1;
    29         for(i=x,j=y;i>=sizex-x-1;i--){//↑↑↑
    30             res.push_back(ma[i][j]);
    31             if((++sum)>=num) {
    32                 return res;
    33             } 
    34         }
    35         x=i+1;y=j+1;
    36     }
    37     return res;
    38 }
     1 //解法2:
     2 从左至右,从上至下,从右至左,从下至上循环打印就好
     3 class Printer {
     4 public:
     5 vector<int> clockwisePrint(vector<vector<int> > mat, int n, int m)  //n m 为行列数
     6 {
     7 // write code here
     8 vector<int> res;
     9 int colbegin=0,colend=m-1,rowbegin=0,rowend=n-1;
    10 int i=0,j=0;
    11 while(colbegin<=colend && rowbegin<=rowend)
    12 {
    13 for(j=colbegin;j<=colend;j++)//right
    14 res.push_back(mat[i][j]);
    15 j--;rowbegin++;
    16 if(res.size()>=n*m) return res;
    17 for(i=rowbegin;i<=rowend;i++)//down
    18 res.push_back(mat[i][j]);
    19 i--;colend--;
    20 if(res.size()>=n*m) return res;
    21 for(j=colend;j>=colbegin;j--)//left
    22 res.push_back(mat[i][j]);
    23 j++;rowend--;
    24 if(res.size()>=n*m) return res;
    25 for(i=rowend;i>=rowbegin;i--)
    26 res.push_back(mat[i][j]);
    27 i++;colbegin++;
    28 if(res.size()>=n*m) return res;
    29 }
    30 return res;
    31 }
    32 };
  • 相关阅读:
    UWP AppConnection.
    Qt 多线程使用moveToThread
    C#综合细说进程、应用程序域与上下文
    C++ std::function
    商品价格加价区间的实现(策略模式)
    学习web前端三个月感悟
    triangle leetcode C++
    Linux入门视频
    轻松学习Linux之进程监视与管理
    阻止缓冲区溢出攻击
  • 原文地址:https://www.cnblogs.com/Kaniso-Vok/p/13965806.html
Copyright © 2011-2022 走看看