当前位置:网站首页>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;
}
边栏推荐
- Sky map coordinate system to Gaode coordinate system WGS84 to GCJ02
- LeetCode third topic (the Longest Substring Without Repeating Characters) trilogy # 3: two optimization
- 【虚拟化生态平台】虚拟化平台esxi挂载USB硬盘
- LDO investigation
- How to copy baby from Taobao (or Tmall store) through API interface to Pinduoduo interface code docking tutorial
- html select tag assignment database query result
- Promise 解决阻塞式同步,将异步变为同步
- 企业虚拟偶像产生了实质性的价值效益
- 计算首屏时间
- pygame 中的transform模块
猜你喜欢
Installation and configuration of nodejs+npm
DDTL:远距离的域迁移学习
字符串的排列
5.scrapy中间件&分布式爬虫
静态文件快速建站
持续投入商品研发,叮咚买菜赢在了供应链投入上
实例035:设置输出颜色
Deng Qinglin, Alibaba Cloud Technical Expert: Best Practices for Disaster Recovery across Availability Zones and Multiple Lives in Different Locations on the Cloud
Array_Sliding window | leecode brushing notes
Slipper —— 虚点,最短路
随机推荐
实例035:设置输出颜色
【虚拟化生态平台】虚拟化平台esxi挂载USB硬盘
静态/动态代理模式
Array_Sliding window | leecode brushing notes
Electronics manufacturing enterprise deployment WMS what are the benefits of warehouse management system
Variable string
一篇文章看懂JS闭包,从执行上下文角度解析有趣的闭包
特征值与特征向量
VR panorama shooting online exhibition hall, 3D panorama brings you an immersive experience
- heavy OpenCV 】 【 mapping
Snake game bug analysis and function expansion
简单的线性表的顺序表示实现,以及线性表的链式表示和实现、带头节点的单向链表,C语言简单实现一些基本功能
Continuing to invest in product research and development, Dingdong Maicai wins in supply chain investment
Flink jdbc connector 源码改造sink之 clickhouse多节点轮询写与性能分析
Download install and create/run project for HBuilderX
实例040:逆序列表
数组_滑动窗口 | leecode刷题笔记
this巩固训练,从两道执行题加深理解闭包与箭头函数中的this
多线程 之 JUC 学习篇章一 创建多线程的步骤
谁说程序员不懂浪漫,表白代码来啦~