万事开头难
这题用的做螺旋矩阵Ⅱ的思路来的,按着Carl大佬的循环不变量来的,我学艺不精,代码东拼西凑,缝缝补补,硬跑出来的,代码看起来很奇怪,但是这样它才能跑出来。
后续再试试其他大佬的思路。
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize){
int *ans = (int*)malloc(sizeof(int) * matrixSize * (*matrixColSize));
//起始位置
int startX = 0;
int startY = 0;
//偏移量
int offest = 1;
int n = matrixSize; //行数
int m = matrixColSize[0]; //列数
int index = 0;
int loop = (m / 2)>(n / 2)?(m/2):(n/2);
if(n == 1) {
index += m;
*returnSize = index;
return matrix[0];
}
if(m == 1){
for(int i = 0;i<n;i++)
ans[index++] = matrix[i][0];
return ans;
}
while(loop){
int i = startX;
int j = startY;
for(;j < m - offest;j++){
ans[index++] = matrix[startX][j];
*returnSize = index;
if(index == m * n) return ans;
}
for(;i < n - offest;i++){
ans[index++] = matrix[i][j];
*returnSize = index;
if(index == m * n) return ans;
}
for(;j > startY;j--){
ans[index++] = matrix[i][j];
*returnSize = index;
if(index == m * n) return ans;
}
for(;i > startX;i--){
ans[index++] = matrix[i][j];
*returnSize = index;
if(index == m * n) return ans;
}
startX++;
startY++;
loop--;
offest++;
}
if(n % 2 && m % 2)
ans[index++] = matrix[m / 2][n / 2];
*returnSize = index;
return ans;
}