Back to all solutions

#498 - Diagonal Traverse

Problem Description

Given an m x n matrix mat, return an array of all the elements of the array in a diagonal order.

Solution

/**
 * @param {number[][]} mat
 * @return {number[]}
 */
var findDiagonalOrder = function(mat) {
  const result = new Array(mat.length * mat[0].length);

  for (let r = 0, c = 0, d = 1, i = 0; i < mat.length * mat[0].length;) {
    result[i++] = mat[r][c];

    if (d === 1) {
      if (c === mat[0].length - 1) {
        r++;
        d = -1;
      } else if (r === 0) {
        c++;
        d = -1;
      } else {
        r--;
        c++;
      }
    } else {
      if (r === mat.length - 1) {
        c++;
        d = 1;
      } else if (c === 0) {
        r++;
        d = 1;
      } else {
        r++;
        c--;
      }
    }
  }

  return result;
};