一.题目
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
链接:https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof/
二.代码展示
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize){
// 对于这个矩阵,如果没有元素的话,直接返回null
if(!matrixSize)
{
*returnSize = 0;
return NULL;
}
// 将元素个数赋值给*returnSize
*returnSize = matrixSize * matrixColSize[0];
// 开辟一个空间为*returnSize
int *nums = (int*)malloc(sizeof(int*) * (*returnSize));
// cur遍历填入新数组,l表示左边,t表示前边,r表示右边,b表示后边
int cur = 0, l = 0, t = 0, r = matrixColSize[0] - 1, b = matrixSize - 1;
// 只要cur小于*returnSize就一直运行
while(cur < *returnSize)
{
// 从左到右,i遍历每一行的数字,然后填入新数组
for(int i = l; cur < *returnSize && i <= r; i++) nums[cur++] = matrix[t][i]; t++;
// 从上到下,i遍历每一列的数字,然后填入新数组
for(int i = t; cur < *returnSize && i <= b; i++) nums[cur++] = matrix[i][r]; r--;
// 从右往左,i遍历每一行的数字,然后填入新数组
for(int i = r; cur < *returnSize && i >= l; i--) nums[cur++] = matrix[b][i]; b--;
// 从下往上,i遍历每一列的数字,然后填入新数组
for(int i = b; cur < *returnSize && i >= t; i--) nums[cur++] = matrix[i][l]; l++;
}
// 返回新数组
return nums;
}