给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
示例 1:
输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]
示例 2:
输入:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]
解题思路:定义四个变量linemin、 linemax、 colmin、 colmax,分别记录当前未遍历到的最小行、最大行、最小列和最大列,然后在这些范围内,沿着边沿顺时针遍历数组。
java代码:
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
if(0 == matrix.length)
return new ArrayList<>();
int linemin = 1, linemax = matrix.length, colmin = 0, colmax = matrix[0].length;
List<Integer> res = new ArrayList<>(linemax*colmax);
for(int i = 0; i < linemax; i++){
for(int j = colmin; j < colmax; j++){
res.add(matrix[i][j]);
if(j == colmax-1){
colmax--;
for(int m = linemin; m < linemax; m++){
res.add(matrix[m][j]);
if(m == linemax-1){
linemax--;
for(int n = colmax-1; n >= colmin; n--){
res.add(matrix[m][n]);
if(n == colmin){
colmin++;
for(int p = linemax-1; p >= linemin; p--){
res.add(matrix[p][n]);
if (p == linemin) {
linemin++;
break;
}
}
}
}
}
}
}
}
}
return res;
}
}