LeetCode热题100 螺旋矩阵

题目描述

给你一个 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 == matrixi.length

1 <= m, n <= 10

-100 <= matrixij <= 100

思路

1 定义dx和dy数组代表4个方向。

2 定义times数组代表有n行和m列。

3 每次走完一个方向,会有一行减去或者一列减去。

4 模拟走完这个过程即可。

代码

cpp 复制代码
class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
    	int n = matrix.size();
    	int m = matrix[0].size();
    	int dx[] = {0, 1, 0, -1}, dy[]= {1, 0, -1, 0}; // 方向 
    	int times[] = {m, n}; // 行和列的大小 
        vector<int>ans; // 答案
		int x = 0, y = -1, pos = 0 ; // x和y初始化坐标, pos代表方向和行列
        while(ans.size() < n * m)
        {
        	for(int i = 0; i < times[pos % 2]; ++i)
			{
				x += dx[pos];
				y += dy[pos];	
				ans.push_back(matrix[x][y]);
			}	
			pos = (pos + 1) % 4;
			--times[pos % 2] ;
		}    
		return ans; 
	}	
};
相关推荐
阳明山水21 分钟前
校准分位数驱动智能库存决策
人工智能·深度学习·算法·机器学习·架构
别动我齐刘海2 小时前
ROS2 Jazzy + C++ 实战路线——进阶学习3
c++·人工智能·vscode·python·算法·机器学习·机器人
zhangfeng11332 小时前
《从“人工适配“到“智能生成“:KernelSwift 跨国产芯片算子迁移全栈方案解读》 —— 强调范式跃迁和跨硬件属性,适合偏架构分析的写法
人工智能·算法·华为·ai编程·npu
0+1112 小时前
算法 --滑动窗口
c++·算法·leetcode
reikocao2 小时前
大场景下 Hessian 特征值放大与退化检测
算法
hetao17338372 小时前
2026-09-18 hetao1733837 的刷题记录
c++·算法
wuyk5553 小时前
21.计数排序:不用比较的“空间换时间”排序算法
python·算法·排序算法
Rabitebla3 小时前
【Linux系统编程】 指令(二):一条路径是怎么定位到文件的
linux·c++·笔记·学习·算法
库玛西3 小时前
数据结构与算法之美:树、森林与二叉树全解析
c语言·数据结构·笔记·考研·算法·学习方法
木井巳3 小时前
【记忆化搜索】最长递增子序列
java·算法·leetcode·深度优先·剪枝·推荐算法