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]
.
说白了就是把矩阵从外圈到内圈顺时针打印出来。
需要写四个循环分别对应四条边的打印,需要注意的是,长边可能存在多打印一次的情况,需要加一条判断语句。
public class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> list = new ArrayList<Integer>();
if(matrix.length==0){
return list;
}
int m = matrix.length;
int n = matrix[0].length;
int s = 0;
while(list.size()<matrix.length*matrix[0].length){
for(int i=s;i<n;i++){
list.add(matrix[s][i]);
}
for(int i=s+1;i<m;i++){
list.add(matrix[i][n-1]);
}
if(s!=m-1){
for(int i=n-2;i>s-1;i--){
list.add(matrix[m-1][i]);
}
}
if(s!=n-1){
for(int i=m-2;i>s;i--){
list.add(matrix[i][s]);
}
}
s++;
m--;
n--;
}
return list;
}
}