if (i - 1 >= 0 && j + 1 < n) { // move right up i--; j++; returntrue; } elseif (j + 1 < n) { // move right j++; returnfalse; } elseif (i + 1 < m){ // move down i++; returnfalse; } returnfalse; // mean in the last elem } boolnextLeftDown(int &i, int &j, int &m, int &n){ if (i + 1 < m && j -1 >= 0) { // move right up i++; j--; returntrue; } elseif (i + 1 < m) { // move down i++; returnfalse; } elseif (j + 1 < n) { // move right j++; returnfalse; } returnfalse; } vector<int> findDiagonalOrder(vector<vector<int>>& matrix){ int m = matrix.size(); vector<int> res; if (m == 0) return res; int n = matrix[0].size(); int i = 0, j = 0; bool up = true;
for(int k = 0;k < m*n;k++) { res.push_back(matrix[i][j]); if (up) { up = nextRightUp(i, j, m, n); } else { up = !nextLeftDown(i, j, m, n); } }