螺旋矩阵(数组)问题(网易考点)

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

题目链接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 };

 

posted @ 2020-11-12 19:34  Kaniso_Vok  阅读(115)  评论(0编辑  收藏  举报