Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
For example,
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> res = new ArrayList<Integer>();
if(matrix == null || matrix.length == 0 || matrix[0].length==0)
return res;
int m = matrix.length;
int n = matrix[0].length;
//确定有几圈
int cycle = m>n ? (n+1)/2 : (m+1)/2;
int a = n, b = m;
for(int i=0; i<cycle; i++){
for(int column=i; column<i+a; column++)
res.add(matrix[i][column]);
for(int row=i+1; row< i+b; row++)
res.add(matrix[row][i+a-1]);
//奇数,只剩最后一行或最后一列,已经处理完,不需要在处理
if(a==1 || b==1) break;
for(int column=i+a-2; column>=i; column--)
res.add(matrix[i+b-1][column]);
for(int row=i+b-2; row>i; row--)
res.add(matrix[row][i]);
a -= 2;
b -= 2;
}
return res;
}
}