当前位置:网站首页>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;
}
边栏推荐
猜你喜欢

Continuing to invest in product research and development, Dingdong Maicai wins in supply chain investment

Continuing to invest in product research and development, Dingdong Maicai wins in supply chain investment

数组_滑动窗口 | leecode刷题笔记

【OpenCV】-重映射

JS 保姆级贴心,从零教你手写实现一个防抖debounce方法

静态文件快速建站

螺旋矩阵_数组 | leecode刷题笔记

The 600MHz band is here, will it be the new golden band?

HBuilderX的下载安装和创建/运行项目

splice随机添加和删除的写法
随机推荐
VR panorama shooting online exhibition hall, 3D panorama brings you an immersive experience
nodejs install multi-version version switching
《Greenplum构建实时数据仓库实践》简介
Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream.
一个注解替换synchronized关键字:分布式场景下实现方法加锁
网络带宽监控,带宽监控工具哪个好
Flink jdbc connector 源码改造sink之 clickhouse多节点轮询写与性能分析
vxe-table 从页面批量删除数据 (不动数据库里的数据)
【正则表达式】笔记
5.scrapy中间件&分布式爬虫
Summary of GNSS Articles
网页三维虚拟展厅为接入元宇宙平台做基础
Slipper —— 虚点,最短路
谁说程序员不懂浪漫,表白代码来啦~
nodejs安装及环境配置
esp32 releases robot battery voltage to ros2 (micro-ros+CoCube)
DDTL:远距离的域迁移学习
nodejs+express实现数据库mysql的访问,并展示数据到页面上
Vant3 - click on the corresponding name name to jump to the next page corresponding to the location of the name of the TAB bar
字符串变形