OR40. 之字形打印矩阵
描述
对于一个矩阵,请设计一个算法,将元素按“之”字形打印。具体见样例。
给定一个整数矩阵mat,以及他的维数nxm,请返回一个数组,其中元素依次为打印的数字。
[[1,2,3],[4,5,6],[7,8,9],[10,11,12]],4,3
返回:[1,2,3,6,5,4,7,8,9,12,11,10]
C++ 解法, 执行用时: 8ms, 内存消耗: 684KB, 提交时间: 2021-09-22
class Printer { public: vector<int> printMatrix(vector<vector<int> > mat, int n, int m) { vector<int> rt; for(int i=0;i<n;i++) { if(i%2==0) { for(int j=0;j<m;j++) rt.push_back(mat[i][j]); } else { for(int j=m-1;j>=0;j--) rt.push_back(mat[i][j]); } } return rt; } };
C++ 解法, 执行用时: 9ms, 内存消耗: 640KB, 提交时间: 2021-12-09
class Printer { public: int dx[4] = {0, 1, 0, 1}, dy[4] = {1, 0 , -1, 0}; vector<int> printMatrix(vector<vector<int> > mat, int n, int m) { int d = 0; vector<int> res; vector<vector<bool> > st(n , vector<bool> (m, false)); int x = 0, y = 0; for(int i = 0; i < n * m; i ++){ res.push_back(mat[x][y]); st[x][y] = true; int a = x + dx[d], b = y + dy[d]; if(a < 0 || a >= n || b < 0 || b >= m || st[a][b] || d == 1 || d == 3){ d = (d + 1) % 4; a = x + dx[d], b = y + dy[d]; } x = a ,y = b; } return res; } };