/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* spiralOrder(int** matrix, int matrixRowSize, int matrixColSize) {
int* vector = malloc( sizeof(int) * matrixRowSize * matrixColSize );
int x0 = 0; // top left x
int y0 = 0; // top left y
int count=0;
int i=0;
if( 0 == matrixRowSize || 0 == matrixColSize ){
return NULL;
}
if( 1 == matrixRowSize || 1 == matrixColSize ){
for(int i=0; i<matrixRowSize; i++){
for(int j=0; j<matrixColSize; j++){
vector[count++]=matrix[i][j];
}
}
return vector;
}
// loop
while(matrixRowSize >=1 && matrixColSize >=1){
int x1 = x0 + matrixRowSize - 1; // bottom right x
int y1 = y0 + matrixColSize - 1; // bottom right y
// first row
for(i=y0; i<=y1; i++){
vector[count++] = matrix[x0][i];
}
// last col
for(i=x0+1; i<=x1; i++){
vector[count++] = matrix[i][y1];
}
// last row
if(matrixRowSize > 1){ // matrix need to be at least two rows
for(i=y1-1; i>=y0; i--){
vector[count++] = matrix[x1][i];
}
}
// first col
if(matrixColSize > 1){ // matrix need to be at least two cols
for(i=x1-1; i>=x0+1; i--){
vector[count++] = matrix[i][y0];
}
}
x0++;
y0++;
matrixRowSize-=2;
matrixColSize-=2;
}
return vector;
}
spiralMatrix
最新推荐文章于 2020-02-05 12:44:15 发布