一、问题描述
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]
.
二、问题分析
螺旋遍历二位数组,可以采用从左往右,从上往下,从右往左,从下往上。。。螺旋的方式遍历,当然需要注意最后仅有一行或者一列的情况。
三、Java AC代码
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> list = new ArrayList<Integer>();
if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
return list;
}
int left = 0, down = 0, right = matrix[0].length - 1, up = matrix.length - 1;
while (left <= right && down <= up) {
if (down==up) {
while(left<=right){
list.add(matrix[down][left]);
left++;
}
return list;
}
if (left==right) {
while(down<=up){
list.add(matrix[down][left]);
down++;
}
return list;
}
for (int i = left; i < right; i++) {
list.add(matrix[down][i]);
}
for (int i = down; i < up; i++) {
list.add(matrix[i][right]);
}
for (int i = right; i > left; i--) {
list.add(matrix[up][i]);
}
for (int i = up; i > down; i--) {
list.add(matrix[i][left]);
}
left++;
down++;
right--;
up--;
}
return list;
}