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]
.
题意:给出一个mxn的矩阵,输出其螺旋矩阵
思路:螺旋矩阵依次顺序是左->右、上->下、右->左、下->上
代码如下
public class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> res = new ArrayList<Integer>();
int[][] dir = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
int m = matrix.length;
int n = m > 0 ? matrix[0].length : 0;
boolean[][] vis = new boolean[m][n];
int cnt = 0;
int total = m * n;
int cur = 0;
int x = 0, y = 0;
int nextx = 0, nexty = 0;
while (cnt < total)
{
if (!vis[x][y])
{
res.add(matrix[x][y]);
vis[x][y] = true;
cnt++;
}
nextx = x + dir[cur][0]; nexty = y + dir[cur][1];
if (nextx < 0 || nextx >= m || nexty < 0 || nexty >= n || vis[nextx][nexty] == true)
{
cur = (cur + 1) % 4;
continue;
}
x = nextx; y = nexty;
}
return res;
}
}