当前位置:网站首页>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;
}
边栏推荐
- 字符串的排列
- 贪吃蛇游戏Bug解析及功能扩展
- pygame 中的transform模块
- Apache DolphinScheduler新一代分布式工作流任务调度平台实战-中
- 持续投入商品研发,叮咚买菜赢在了供应链投入上
- Example 040: Reverse List
- 持续投入商品研发,叮咚买菜赢在了供应链投入上
- Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream.
- Vant3 - click on the corresponding name name to jump to the next page corresponding to the location of the name of the TAB bar
- Android interview questions and answer analysis of major factories in the first half of 2022 (continuously updated...)
猜你喜欢

nodejs+express realizes the access to the database mysql and displays the data on the page

什么是SVN(Subversion)?

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

Quickly build a website with static files

一篇文章看懂JS闭包,从执行上下文角度解析有趣的闭包

js中常用的几种遍历处理数据的方法梳理

Installation and configuration of nodejs+npm

SAP SD模块前台操作

【store商城项目01】环境准备以及测试

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
nodejs 安装多版本 版本切换
Continuing to pour money into commodities research and development, the ding-dong buy vegetables in win into the supply chain
this巩固训练,从两道执行题加深理解闭包与箭头函数中的this
Flutter3.0线程——四步教你如何全方位了解(事件队列)
MySQL回表指的是什么
vxe-table 从页面批量删除数据 (不动数据库里的数据)
boot issue
持续投入商品研发,叮咚买菜赢在了供应链投入上
【虚拟户生态平台】虚拟化平台安装时遇到的坑
KunlunBase 1.0 发布了!
esp32 releases robot battery voltage to ros2 (micro-ros+CoCube)
通用的测试用例编写大全(登录测试/web测试等)
【无标题】
企业虚拟偶像产生了实质性的价值效益
【QT小记】QT中信号和槽的基本使用
How to copy baby from Taobao (or Tmall store) through API interface to Pinduoduo interface code docking tutorial
实例037:排序
Electronics manufacturing enterprise deployment WMS what are the benefits of warehouse management system
即席查询——Presto