直接用一个等大矩阵来染色比较好写。
不用额外空间,写起来就比较麻烦。
核心思想,每一层加loc超容判断,a,b两个方向的游标。
/*
* @lc app=leetcode id=54 lang=cpp
*
* [54] Spiral Matrix
*/
// @lc code=start
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
if(matrix.size() <= 0){
return *(new vector<int>);
}
int M = matrix.size();
int N = matrix[0].size();
int T = N*M;
vector<int> ans(T,0);
int loc = 0;
int a = 0 , b = 0;
// 层
int L = (min(N,M)+1)/2;
for(int i=0;i<L;i++){
// 上一层
while(loc < T && b < N-1-i){
ans[loc++] = matrix[a][b++];
}
// 右一层
while(loc < T && a < M-1-i){
ans[loc++] = matrix[a++][b];
}
// 下一层
while(loc < T && b > i){
ans[loc++] = matrix[a][b--];
}
// 左一层
while(loc < T && a > i){
ans[loc++] = matrix[a--][b];
}
a++;b++;
}
if( loc < T) ans[loc++] = matrix[M/2][N/2];
return ans;
}
};
// @lc code=end
本文介绍了一种螺旋矩阵遍历算法的实现,通过使用双游标技术和层循环,有效地遍历了矩阵的所有元素,适用于LeetCode上的螺旋矩阵题目。算法避免了额外的空间开销,直接在原矩阵上进行操作。

被折叠的 条评论
为什么被折叠?



