Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
For example,
Given the following matrix:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
You should return [1,2,3,6,9,8,7,4,5].
给定m*n大小的矩阵,螺旋输出矩阵的元素。
数据结构:Vector
螺旋输出就OK
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
if(matrix.size() <= 0) return {};
int rows = matrix.size();
int cols = matrix[0].size();
vector<int> spiral(rows*cols);
int u = 0, d = rows-1, l = 0, r = cols-1, k = 0;
while(true){
for(int col = l; col <= r; ++col)
spiral[k++] = matrix[u][col];
if(++u > d) break;
for(int row = u; row <= d; ++row)
spiral[k++] = matrix[row][r];
if(--r < l) break;
for(int col = r; col >= l; --col)
spiral[k++] = matrix[d][col];
if(--d < u) break;
for(int row = d; row >= u; --row)
spiral[k++] = matrix[row][l];
if(++l > r) break;
}
return spiral;
}
};
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
For example,
Given n = 3,
You should return the following matrix:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
给定数字n,构造n*n的螺旋矩阵。
数据结构:Vector
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
if(n < 1) return {};
vector<vector<int> > spiral(n, vector<int>(n));
int u = 0, d = n-1, l = 0, r = n-1;
int k = 1;
while(k <= n*n){
for(int col = l; col <= r; ++col)
spiral[u][col] = k++;
u++;
for(int row = u; row <= d; ++row)
spiral[row][r] = k++;
r--;
for(int col = r; col >= l; --col)
spiral[d][col] = k++;
d--;
for(int row = d; row >= u; --row)
spiral[row][l] = k++;
l++;
}
return spiral;
}
};