当前位置:网站首页>C语言力扣第54题之螺旋矩阵。模拟旋转
C语言力扣第54题之螺旋矩阵。模拟旋转
2022-08-04 01:40:00 【管二狗绝不摆烂】
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]
提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 10
-100 <= matrix[i][j] <= 100
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/spiral-matrix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
- 可以模拟螺旋矩阵的路径。初始位置是矩阵的左上角,初始方向是向右,当路径超出界限或者进入之前访问过的位置时,顺时针旋转,进入下一个方向。
- 判断路径是否进入之前访问过的位置需要使用一个与输入矩阵大小相同的辅助矩阵 visited,其中的每个元素表示该位置是否被访问过。当一个元素被访问时,将 visited 中的对应位置的元素设为已访问。
- 如何判断路径是否结束?由于矩阵中的每个元素都被访问一次,因此路径的长度即为矩阵中的元素数量,当路径的长度达到矩阵中的元素数量时即为完整路径,将该路径返回。
int directions[4][2] = {
{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize) {
if (matrixSize == 0 || matrixColSize[0] == 0) {
*returnSize = 0;
return NULL;
}
int rows = matrixSize, columns = matrixColSize[0];
int visited[rows][columns];
memset(visited, 0, sizeof(visited));
int total = rows * columns;
int* order = malloc(sizeof(int) * total);
*returnSize = total;
int row = 0, column = 0;
int directionIndex = 0;
for (int i = 0; i < total; i++) {
order[i] = matrix[row][column];
visited[row][column] = true;
int nextRow = row + directions[directionIndex][0], nextColumn = column + directions[directionIndex][1];
if (nextRow < 0 || nextRow >= rows || nextColumn < 0 || nextColumn >= columns || visited[nextRow][nextColumn]) {
directionIndex = (directionIndex + 1) % 4;
}
row += directions[directionIndex][0];
column += directions[directionIndex][1];
}
return order;
}
边栏推荐
猜你喜欢
随机推荐
pygame 中的transform模块
idea中diagram使用
静态/动态代理模式
Continuing to invest in product research and development, Dingdong Maicai wins in supply chain investment
GNSS【0】- 专题
Apache DolphinScheduler actual combat task scheduling platform - a new generation of distributed workflow
Promise 解决阻塞式同步,将异步变为同步
简单排序(暑假每日一题 14)
LDO investigation
Electronics manufacturing enterprise deployment WMS what are the benefits of warehouse management system
一篇文章看懂JS闭包,从执行上下文角度解析有趣的闭包
KunlunBase 1.0 is released!
Deng Qinglin, Alibaba Cloud Technical Expert: Best Practices for Disaster Recovery across Availability Zones and Multiple Lives in Different Locations on the Cloud
OpenCV如何实现Sobel边缘检测
Thinkphp commonly used techniques
Slipper —— 虚点,最短路
Sticker Spelling - Memory Search / Shape Pressure DP
nodejs安装及环境配置
【OpenCV】-重映射
小甲鱼汇编笔记









