1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| class Solution { public: vector<int> findDiagonalOrder(vector<vector<int>>& mat) { int m = mat.size(), n = mat[0].size(); if(m == 1) return mat[0]; if(n == 1) { vector<int> v; for(auto v1 : mat) v.push_back(v1[0]); return v; } int i{ 0 }, j{ 0 }; vector<int> ret; int dir{ 1 }; int d[2][2]{ { 1, -1 }, {-1, 1} }; while(i < m && j < n) { ret.push_back(mat[i][j]); if(i == 0 || i == m - 1 || j == 0 || j == n - 1) { if(j == n - 1) ++i; else if(i == 0) ++j; else if(i == m - 1) ++j; else if(j == 0) ++i; ret.push_back(mat[i][j]); dir = (dir + 1) % 2; } i += d[dir][0]; j += d[dir][1]; } return ret; } }; };
|