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>();
int m = matrix.length;
if(m == 0){
return list;
}
int n = matrix[0].length;
spiralOrder(list, matrix, 0, 0, m , n);
return list;
}
private void spiralOrder(List<Integer> list, int[][] matrix, int startLine, int startCol, int m, int n) {
// TODO Auto-generated method stub
for(int i = 0; i < n ; i++){
list.add(matrix[startLine][startCol++]);
}
for(int i = 1; i < m-1; i++){
list.add(matrix[++startLine][startCol-1]);
}
if(m > 1)
for(int i = 0; i < n; i++){
list.add(matrix[startLine+1][--startCol]);
}
if(n > 1)
for(int i = 1; i < m-1; i++){
list.add(matrix[startLine--][startCol]);
}
if( m-2 > 0 && n-2 > 0){
spiralOrder(list, matrix, startLine + 1, startCol + 1, m-2 , n-2);
}
}
}