diff options
Diffstat (limited to 'Computer_Science/leetcode/59-spiral_matrix_II.c')
| -rw-r--r-- | Computer_Science/leetcode/59-spiral_matrix_II.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/Computer_Science/leetcode/59-spiral_matrix_II.c b/Computer_Science/leetcode/59-spiral_matrix_II.c new file mode 100644 index 0000000..27b96bb --- /dev/null +++ b/Computer_Science/leetcode/59-spiral_matrix_II.c @@ -0,0 +1,34 @@ +/** + * Return an array of arrays. + * Note: The returned array must be malloced, assume caller calls free(). + */ +int** generateMatrix(int n) { + int **matrix = malloc(sizeof(int *) * n); + int offset = 0; + int maxOffset = n / 2 + 1; + int index = 1; + int i; + + for(i = 0; i < n; i++) + *(matrix + i) = malloc(sizeof(int) * n); + + for(offset = 0; offset < maxOffset; offset++, n -= 2) { + if(n == 0) + break; + else if(n == 1) { + matrix[offset][offset] = index++; + break; + } else { + for(i = 0; i < n; i++) + matrix[offset][offset + i] = index++; + for(i = 1; i < n; i++) + matrix[offset + i][offset + n - 1] = index++; + for(i = 1; i < n; i++) + matrix[offset + n - 1][offset + n - 1 - i] = index++; + for(i = 1; i < n - 1; i++) + matrix[offset + n - 1 - i][offset] = index++; + } + } + + return matrix; +} |
