当前位置:网站首页>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;
}
边栏推荐
- - heavy OpenCV 】 【 mapping
- 贴纸拼词 —— 记忆化搜索 / 状压DP
- 无代码7月热讯 | 微软首推数字联络中心平台;全球黑客马拉松...
- flask框架初学-06-对数据库的增删改查
- DDTL:远距离的域迁移学习
- 网页三维虚拟展厅为接入元宇宙平台做基础
- 通用的测试用例编写大全(登录测试/web测试等)
- 特征值与特征向量
- nodejs+express realizes the access to the database mysql and displays the data on the page
- Flask Framework Beginner-06-Add, Delete, Modify and Check the Database
猜你喜欢
Analysis of usage scenarios of mutex, read-write lock, spin lock, and atomic operation instructions xaddl and cmpxchg
Snake game bug analysis and function expansion
Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream.
《Greenplum构建实时数据仓库实践》简介
计算首屏时间
Continuing to invest in product research and development, Dingdong Maicai wins in supply chain investment
C程序编译和预定义详解
通用的测试用例编写大全(登录测试/web测试等)
阿里云技术专家邓青琳:云上跨可用区容灾和异地多活最佳实践
The 600MHz band is here, will it be the new golden band?
随机推荐
Observability:你所需要知道的关于 Syslog 的一些知识
2022 中国算力大会发布“创新先锋”优秀成果
观察者模式
Installation and configuration of nodejs+npm
计算首屏时间
nodejs+express realizes the access to the database mysql and displays the data on the page
持续投入商品研发,叮咚买菜赢在了供应链投入上
Web APIs BOM- 操作浏览器:swiper 插件
- heavy OpenCV 】 【 mapping
实例036:算素数
boot issue
Snake game bug analysis and function expansion
【虚拟户生态平台】虚拟化平台安装时遇到的坑
Continuing to invest in product research and development, Dingdong Maicai wins in supply chain investment
静态/动态代理模式
持续投入商品研发,叮咚买菜赢在了供应链投入上
工程制图复习题
工程制图名词解释-重点知识
Android interview questions and answer analysis of major factories in the first half of 2022 (continuously updated...)
哎,又跟HR在小群吵了一架!