1 /*2 题目描述:3 对于一个矩阵,请设计一个算法,将元素按“之”字形打印。具体见样例。4 给定一个整数矩阵mat,以及他的维数nxm,请返回一个数组,其中元素依次为打印的数字。5 测试样例:6 [[1,2,3],[4,5,6],[7,8,9],[10,11,12]],4,37 返回:[1,2,3,6,5,4,7,8,9,12,11,10]8 */
1 #include2 #include 3 using namespace std; 4 /* 5 实现斜之字打印矩阵: 6 eg:矩阵A为: 7 1 2 3 8 4 5 6 9 7 8 910 10 11 1211 斜之字打印的结果为:12 [1,2,4,7,5,3,6,8,10,11,9,12]13 */14 vector printLine(vector > m, int t1, int t2, int d1, int d2, bool flag){15 vector 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 printMatrix(vector > 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 rt;36 while (t1 < n && t2 < m && d1 < n && d2 < m){37 vector 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 else43 t2++;44 if (d1 == n-1)45 d2++;46 else47 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 printMatrix(vector> mat, int n, int m) { 7 vector 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> matrix; 4 vector 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 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 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 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 rt;33 rt = printMatrix(matrix,4,3);34 for (int i = 0; i < rt.size(); i++)35 cout << rt[i] << ",";36 return 0;37 }