Zigzag Traverse

  • n, 1

function zigzagTraverse(matrix) {
  const answer = [matrix[0][0]];
  const rowLen = matrix.length;
  const colLen = matrix[0].length;

  let row = 0;
  let col = 0;

  while (true) {
    if (row === rowLen - 1 && col === colLen - 1) break;

    // going right
    if (row === rowLen - 1 && col < colLen - 1) {
      col += 1;
    }
    // going down
    if(col === 0 && row < rowLen - 1) {
      row += 1;
    }

    while (row >= 0 && col < colLen) {
      answer.push(matrix[row][col]);
      row--;
      col++;
    }
    row++;
    col--;

    if (row === rowLen - 1 && col === colLen - 1) break;

    // going down
    if (col === colLen - 1 && row < rowLen - 1) {
      row += 1;
    }

    // going right
    if (row === 0 && col < colLen - 1) {
      col += 1;
    }    

    while (col >= 0 && row < rowLen) {
      answer.push(matrix[row][col]);
      row++;
      col--;
    }
    row--;
    col++;

    if (row === rowLen - 1 && col === colLen - 1) break;
  }
  
  return answer;
}

// Do not edit the line below.
exports.zigzagTraverse = zigzagTraverse;
  • another way

  • n, n

Last updated