欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 54. 螺旋矩阵

54. 螺旋矩阵

2025/8/22 16:47:43 来源:https://blog.csdn.net/weixin_51922037/article/details/148015063  浏览:    关键词:54. 螺旋矩阵

题目链接:


     a54. 螺旋矩阵

题目描述:

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

题目分析:

改题目需要判断是否溢出边界,与59不同,59可以判断是否为0来作为溢出条件,此题可以建立一个是否遍历过的数组来作为判断溢出的条件
本方法为通过定义上下左右四个边界来判断,每个方向遍历结束之后将x,y置为下一个位置
​​​​​​​从第二个位置开始遍历和赋值,每个重合的角让当前循环来赋值,而代码随想录上解析是让下一个循环来赋值,有兴趣的可以看代码随想录b站视频

题解:

/*** Note: The returned array must be malloced, assume caller calls free().*/
int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize) {*returnSize = matrixSize * *matrixColSize;// 定义遍历坐标x,y从(0,1)开始int x = 0;int y = 1;// 定义赋值时返回数组的角标int i = 1;// 为返回数组分配空间int *arr = (int *)malloc(sizeof(int) * matrixSize * *matrixColSize);// 定义四个边界上下左右int top = 0;int bottom = matrixSize;int left = 0;int right = matrixColSize[0];// 为初始位置赋值arr[0] = matrix[0][0];while(top <= bottom && left <= right){// 先向右遍历矩阵,直到越界// 当此次循环向右遍历完成之后,还要继续向下执行,所以要判断i是否小于返回数组的大小,以防越界// 向右遍历时可以不进行判断i是否溢出,但剩下三个必须判断while(y < right && i < *returnSize){arr[i++] = matrix[x][y++];}// 上边界缩小top++;// 将y赋值为不越界的状态,且x指向下一行,即将x,y指向下一个遍历的位置y--;x++;// 向下遍历矩阵,直到溢出边界,需要判断i是否产生溢出while(x < bottom && i < *returnSize){arr[i++] = matrix[x++][y];}// 右边界缩小right--;// 将x赋值为不越界的状态,且y指向上一列,即将x,y指向下一个遍历的位置x--;y--;// 向左遍历矩阵,直到溢出边界,需要判断i是否产生溢出while(y >= left && i < *returnSize){arr[i++] = matrix[x][y--];}// 下边界缩小bottom--;// 将x,y指向下一个遍历的位置y++;x--;// 向上遍历矩阵,直到溢出边界,需要判断i是否产生溢出while(x >= top && i < *returnSize){arr[i++] = matrix[x--][y];}// 下边界缩小left++;// 将x,y指向下一个遍历的位置x++;y++;// 若未遍历完数组,进行下一次循环}return arr;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词