diff options
| author | Steve Lee <me@xiangyangli.com> | 2017-12-26 01:33:40 +0800 |
|---|---|---|
| committer | Steve Lee <me@xiangyangli.com> | 2017-12-26 01:33:40 +0800 |
| commit | 79a9c52fa923fc78074d88463449a8b7f95ca3ef (patch) | |
| tree | 80c2b596a7c41124845771dca99abd364e89d4c4 /Computer_Science/leetcode/54-spiral_matrix.c | |
| parent | 2e0e0f39d49296f0ffb99aea533a527174521d61 (diff) | |
| download | 42-79a9c52fa923fc78074d88463449a8b7f95ca3ef.tar.xz 42-79a9c52fa923fc78074d88463449a8b7f95ca3ef.zip | |
update leetcode solution
Diffstat (limited to 'Computer_Science/leetcode/54-spiral_matrix.c')
| -rw-r--r-- | Computer_Science/leetcode/54-spiral_matrix.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/Computer_Science/leetcode/54-spiral_matrix.c b/Computer_Science/leetcode/54-spiral_matrix.c new file mode 100644 index 0000000..9e747f0 --- /dev/null +++ b/Computer_Science/leetcode/54-spiral_matrix.c @@ -0,0 +1,36 @@ +/** + * Note: The returned array must be malloced, assume caller calls free(). + */ + +#define MIN(a, b) ((a) > (b) ? (b) : (a)) +int* spiralOrder(int** matrix, int matrixRowSize, int matrixColSize) { + int* result = malloc(sizeof(int) * matrixRowSize * matrixColSize); + int index = 0; + int offset; + int maxOffset = MIN(matrixRowSize, matrixColSize) / 2 + 1; + + for(offset = 0; offset < maxOffset; offset++, matrixColSize-= 2, matrixRowSize-= 2) { + if(matrixRowSize == 0 || matrixColSize == 0) + break; + else if(matrixRowSize == 1) { + for(int i = 0; i < matrixColSize; i++) + result[index++] = matrix[offset][offset + i]; + break; + } else if(matrixColSize == 1) { + for(int i = 0; i < matrixRowSize; i++) + result[index++] = matrix[offset + i][offset]; + break; + } else { + for(int i = 0; i < matrixColSize; i++) + result[index++] = matrix[offset][offset + i]; + for(int i = 1; i < matrixRowSize; i++) + result[index++] = matrix[offset + i][offset + matrixColSize - 1]; + for(int i = 1; i < matrixColSize; i++) + result[index++] = matrix[offset + matrixRowSize - 1][offset + matrixColSize - 1 - i]; + for(int i = 1; i < matrixRowSize - 1; i++) + result[index++] = matrix[offset + matrixRowSize - 1 - i][offset]; + } + } + + return result; +} |
