Leetcode 498 Solution

This article provides solution to leetcode question 498 (diagonal-traverse)

https://leetcode.com/problems/diagonal-traverse

Solution

class Solution { public: vector<int> findDiagonalOrder(vector<vector<int>>& matrix) { vector<int> res; if (matrix.size() == 0 || matrix[0].size() == 0) return res;
int m = matrix.size(); int n = matrix[0].size(); int i = 0, j = 0; int dir = 1; while (res.size() != m * n) { res.push_back(matrix[i][j]);
int next_i = i; int next_j = j;
if (dir == 1) next_i--, next_j++; else if (dir == 2) next_i++, next_j--;
if (0 <= next_i && next_i < m && 0 <= next_j && next_j < n) { i = next_i; j = next_j; } else if (next_i >= m) { i = m - 1; j = next_j + 2; dir = 3 - dir; } else if (next_j >= n) { i = next_i + 2; j = n - 1; dir = 3 - dir; } else if (next_j < 0) { i = next_i; j = 0; dir = 3 - dir; } else if (next_i < 0) { i = 0; j = next_j; dir = 3 - dir; } }
return res; } };