题目原型:
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 ArrayListspiralOrder(int[][] matrix) { ArrayList list = new ArrayList (); if (matrix == null || matrix.length == 0) return list; int layer = 0;// 围成的层数 int row = 0; int column = 0; int lenRow = matrix.length; int lenCol = matrix[0].length; int min = lenRow < lenCol lenRow : lenCol; //单独处理行或列为1的情况 if(min==1) { if(lenCol==1) { for(int index = 0;index = layer) { list.add(matrix[row][column]); column--; } column++; row--; layer++;// 将圈数加一 while (row >= layer) { list.add(matrix[row][column]); row--; } if (layer >= min / 2) break; // 重新分配起点 row = layer; column = layer; } // 处理最后一圈 if (lenRow % 2 == 0 && lenCol % 2 != 0) { column = lenCol / 2; for (int index = layer; index < lenRow - layer; index++) { list.add(matrix[index][column]); } } if (lenRow % 2 != 0 && lenCol % 2 == 0) { row = lenRow / 2; for (int index = layer; index < lenCol - layer; index++) { list.add(matrix[row][index]); } } if (lenRow % 2 != 0 && lenCol % 2 != 0) { if (lenRow < lenCol) { row = lenRow / 2; for (int index = layer; index < lenCol - layer; index++) { list.add(matrix[row][index]); } } else { column = lenCol / 2; for (int index = layer; index < lenRow - layer; index++) { list.add(matrix[index][column]); } } } return list; }