Spiral Matrix

2014-11-24 01:22:20 · 作者: · 浏览: 0

题目原型:

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 ArrayList
  
    spiralOrder(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; }