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]
.
题中要求螺旋式遍历一个二维数组
螺旋式的遍历 共有四步 从上左到上右 从右上到右下 从下右到下左 从左下到左上 四步为一个循环 所以 只要按照步骤 进行递归 每次进行一个顺序的遍历 用一个参量 count来决定其遍历顺序 再将左右边界进行重新划定 然后递归 注意的是递归的结束条件 是左右或上下边界超出 代码如下:
public class Solution {
public static List<Integer> spiralOrder(int[][] matrix) {
List<Integer> res = new ArrayList<Integer>();
if(matrix.length==0)return res;
arrayComeplete(matrix, 0, matrix.length-1, 0, matrix[0].length-1,
0, res);
return res;
}
public static void arrayComeplete(int[][] matrix, int xbegin, int xend,
int ybegin, int yend, int count, List<Integer> res) {
if (xbegin > xend || ybegin > yend)
return;
switch (count % 4) {
case 0:
for (int i = ybegin; i <= yend; i++) {
res.add(matrix[xbegin][i]);
}
xbegin++;
count++;
arrayComeplete(matrix, xbegin, xend, ybegin, yend, count, res);
break;
case 1:
for (int i = xbegin; i <= xend; i++) {
res.add(matrix[i][yend]);
}
yend--;
count++;
arrayComeplete(matrix, xbegin, xend, ybegin, yend, count, res);
break;
case 2:
for (int i = yend; i >= ybegin; i--) {
res.add(matrix[xend][i]);
}
xend--;
count++;
arrayComeplete(matrix, xbegin, xend, ybegin, yend, count, res);
break;
case 3:
for (int i = xend; i >= xbegin; i--) {
res.add(matrix[i][ybegin]);
}
ybegin++;
count++;
arrayComeplete(matrix, xbegin, xend, ybegin, yend, count, res);
break;
default:
break;
}
}
}