Skip to content

Instantly share code, notes, and snippets.

@gene-ressler
Last active December 11, 2017 02:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gene-ressler/6d59fe6becdf10291c028dd2f8ae1558 to your computer and use it in GitHub Desktop.
Save gene-ressler/6d59fe6becdf10291c028dd2f8ae1558 to your computer and use it in GitHub Desktop.
Diagonal array walker
#include <stdlib.h>
int* getDiagonalOrder(int** matrix, int m, int n) {
int *r = malloc(m * n * sizeof(int));
int dir = 1, i = 0, j = 0;
for (int k = 0; k < m * n; ++k) {
r[k] = matrix[i][j];
if (dir > 0) {
if (j == n - 1) {
dir = -1;
++i;
} else if (i == 0) {
dir = -1;
++j;
} else {
--i;
++j;
}
} else {
if (i == m - 1) {
dir = 1;
++j;
} else if (j == 0) {
dir = 1;
++i;
} else {
--j;
++i;
}
}
}
return r;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment