1 /* 2 题目描述: 3 对于一个矩阵,请设计一个算法,将元素按“之”字形打印。具体见样例。 4 给定一个整数矩阵mat,以及他的维数nxm,请返回一个数组,其中元素依次为打印的数字。 5 测试样例: 6 [[1,2,3],[4,5,6],[7,8,9],[10,11,12]],4,3 7 返回:[1,2,3,6,5,4,7,8,9,12,11,10] 8 */
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 /* 5 实现斜之字打印矩阵: 6 eg:矩阵A为: 7 1 2 3 8 4 5 6 9 7 8 9 10 10 11 12 11 斜之字打印的结果为: 12 [1,2,4,7,5,3,6,8,10,11,9,12] 13 */ 14 vector<int> printLine(vector<vector<int> > m, int t1, int t2, int d1, int d2, bool flag){ 15 vector<int> line; 16 if (!flag){ // 从右上到左下打印 17 while (t1 <= d1 && t2 >= d2){ 18 line.push_back(m[t1++][t2--]); 19 } 20 } 21 else{ // 从左下到右上打印 22 while (t1 <= d1 && t2 >= d2){ 23 line.push_back(m[d1--][d2++]); 24 } 25 } 26 return line; 27 } 28 29 vector<int> printMatrix(vector<vector<int> > mat, int n, int m) { 30 int t1 = 0; 31 int t2 = 0; 32 int d1 = 0; 33 int d2 = 0; 34 bool flag = true; 35 vector<int> rt; 36 while (t1 < n && t2 < m && d1 < n && d2 < m){ 37 vector<int> line = printLine(mat, t1, t2, d1, d2, flag); 38 for (int i = 0; i < line.size(); i++) 39 rt.push_back(line[i]); 40 if (t2 == m-1) 41 t1++; 42 else 43 t2++; 44 if (d1 == n-1) 45 d2++; 46 else 47 d1++; 48 flag = !flag; 49 } 50 return rt; 51 }
1 /* 2 NowCoder上面的题目较简单。 3 矩阵A的打印结果为: 4 [1,2,3,6,5,4,7,8,9,12,11,10] 5 */ 6 vector<int> printMatrix(vector<vector<int> > mat, int n, int m) { 7 vector<int> rt; 8 bool flag = true; 9 for (int i = 0; i < n; i++){ // 逐行打印 10 if (flag){ // 从左到右打印 11 for (int j = 0; j < m; j++) 12 rt.push_back(mat[i][j]); 13 } 14 else{ // 从右向左打印 15 for (int j = m-1; j>= 0; j--) 16 rt.push_back(mat[i][j]); 17 } 18 flag = !flag; 19 } 20 return rt; 21 }
1 test: 2 int main(){ 3 vector<vector<int> > matrix; 4 vector<int> a; 5 a.push_back(1); 6 a.push_back(2); 7 a.push_back(3);/* 8 a.push_back(4);*/ 9 matrix.push_back(a); 10 11 vector<int> b; 12 b.push_back(4); 13 b.push_back(5); 14 b.push_back(6);/* 15 b.push_back(8);*/ 16 matrix.push_back(b); 17 18 vector<int> c; 19 c.push_back(7); 20 c.push_back(8); 21 c.push_back(9);/* 22 c.push_back(12);*/ 23 matrix.push_back(c); 24 25 vector<int> d; 26 d.push_back(10); 27 d.push_back(11); 28 d.push_back(12);/* 29 c.push_back(12);*/ 30 matrix.push_back(d); 31 32 vector<int> rt; 33 rt = printMatrix(matrix,4,3); 34 for (int i = 0; i < rt.size(); i++) 35 cout << rt[i] << ","; 36 return 0; 37 }