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 == matrix[i].length

1 <= m, n <= 10

-100 <= matrix[i][j] <= 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; 
	}	
};
相关推荐
Dlrb12114 小时前
C语言-指针三
c语言·算法·指针·const·命令行参数
Tisfy5 小时前
LeetCode 2540.最小公共值:双指针(O(m+n))
算法·leetcode·题解·双指针
IronMurphy5 小时前
【算法四十七】152. 乘积最大子数组
算法
淘矿人6 小时前
Claude辅助DevOps实践
java·大数据·运维·人工智能·算法·bug·devops
Cosolar6 小时前
万字详解:RAG 向量索引算法与向量数据库架构及实战
数据库·人工智能·算法·数据库架构·milvus
落羽的落羽7 小时前
【算法札记】练习 | Week4
linux·服务器·数据结构·c++·人工智能·算法·动态规划
萑澈8 小时前
算法竞赛入门:C++ STL核心用法与时空复杂度速查手册
数据结构·c++·算法·stl
Godspeed Zhao9 小时前
从零开始学AI16——SVM
算法·机器学习·支持向量机
江屿风9 小时前
C++OJ题经验总结(竞赛)1
开发语言·c++·笔记·算法