当前位置:网站首页>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;
}
边栏推荐
- Variable string
- Android interview questions and answer analysis of major factories in the first half of 2022 (continuously updated...)
- Deng Qinglin, Alibaba Cloud Technical Expert: Best Practices for Disaster Recovery across Availability Zones and Multiple Lives in Different Locations on the Cloud
- idea中diagram使用
- Sticker Spelling - Memory Search / Shape Pressure DP
- 简单排序(暑假每日一题 14)
- html select tag assignment database query result
- 【正则表达式】笔记
- Promise solves blocking synchronization and turns asynchronous into synchronous
- MySQL回表指的是什么
猜你喜欢
随机推荐
GNSS文章汇总
工程制图名词解释-重点知识
螺旋矩阵_数组 | leecode刷题笔记
安全至上:落地DevSecOps最佳实践你不得不知道的工具
Variable string
html select tag assignment database query result
Apache DolphinScheduler actual combat task scheduling platform - a new generation of distributed workflow
2022 中国算力大会发布“创新先锋”优秀成果
Web APIs BOM - operating browser: swiper plug-in
有没有jdbc 链接优炫数据库文档及示例?
GraphQL背后处理及执行过程是什么
splice随机添加和删除的写法
C语言:学生管理系统(链表版)
天地图坐标系转高德坐标系 WGS84转GCJ02
【虚拟户生态平台】虚拟化平台安装时遇到的坑
DDTL:远距离的域迁移学习
C 学生管理系统_分析
Flink jdbc connector 源码改造sink之 clickhouse多节点轮询写与性能分析
简单排序(暑假每日一题 14)
多线程 之 JUC 学习篇章一 创建多线程的步骤