题目:
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 class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
if(null==matrix||matrix.length<=0) return new ArrayList<Integer>();
int x1=0,y1=0;
int x2=matrix.length-1,y2=matrix[matrix.length-1].length-1;
List<Integer> ret = new ArrayList<Integer>();
while(x1<=x2&&y1<=y2){
for(int i=x1,j=y1;j<=y2;j++) ret.add(matrix[i][j]); // left to right
for(int i=x1+1,j=y2;i<=x2;i++) ret.add(matrix[i][j]); // right up to right down
for(int i=x2,j=y2-1;i>x1&&j>=y1;j--) ret.add(matrix[i][j]); // right to left
for(int i=x2-1,j=y1;i>x1&&j<y2;i--) ret.add(matrix[i][j]); // left down to left up
x1++;y1++;
x2--;y2--;
}
return ret;
}
}
参考: