原题网址:http://www.lintcode.com/zh-cn/problem/matrix-zigzag-traversal/
给你一个包含 m x n 个元素的矩阵 (m 行, n 列), 求该矩阵的之字型遍历。
样例
对于如下矩阵:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10, 11, 12]
]
返回 [1, 2, 5, 9, 6, 3, 4, 7, 10, 11, 8, 12]
1 #include <iostream> 2 #include <vector> 3 #include <math.h> 4 #include <string> 5 #include <algorithm> 6 using namespace std; 7 8 vector<int> printZMatrix(vector<vector<int>> &matrix) 9 { 10 int row=matrix.size(); 11 int col=matrix[0].size(); 12 int total=row*col; 13 vector<int> result; 14 int i=0; 15 int j=0; 16 int count=0; 17 18 result.push_back(matrix[i][j]); 19 count++; 20 21 bool up=true; 22 23 while(count<total) 24 { 25 26 if (up) 27 { 28 //向上走; 29 if ((i-1)>=0&&(j+1)<col) 30 { 31 result.push_back(matrix[i-1][j+1]); 32 count++; 33 i=i-1; 34 j=j+1; 35 } 36 else 37 { 38 if ((j+1)<col) 39 { 40 result.push_back(matrix[i][j+1]); 41 count++; 42 j=j+1; 43 } 44 else //error:写成if((j+i)>=col),因为上一个if中j+1可能发生变化,应该用else直接分成两种情况; 45 { 46 result.push_back(matrix[i+1][j]); 47 count++; 48 i=i+1; 49 } 50 51 up=false; 52 } 53 } 54 else //向下走; 55 { 56 57 if ((i+1)<row&&(j-1)>=0) 58 { 59 result.push_back(matrix[i+1][j-1]); 60 count++; 61 i=i+1; 62 j=j-1; 63 64 } 65 else 66 { 67 68 if ((i+1)<row) 69 { 70 result.push_back(matrix[i+1][j]); 71 count++; 72 i=i+1; 73 } 74 else 75 { 76 result.push_back(matrix[i][j+1]); 77 count++; 78 j=j+1; 79 } 80 81 up=true; 82 } 83 } 84 85 } 86 return result; 87 }
参考:
1 https://blog.csdn.net/guoziqing506/article/details/51602261