描述:
给定一个包含 m x n 个要素的矩阵,(m 行, n 列),按照螺旋顺序,返回该矩阵中的所有要素。
样例:
给定如下矩阵:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
应返回 [1,2,3,6,9,8,7,4,5]
。
Java代码:
public class Solution {
/**
* @param matrix a matrix of m x n elements
* @return an integer list
*/
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> list = new ArrayList<Integer>();
if(matrix == null || matrix.length==0 || (matrix.length!=0 && matrix[0].length==0)){
return list;
}
int m = matrix.length;
int n = matrix[0].length;
//System.out.println(m);
//System.out.println(n);
int mStart = 0;
int mEnd = m-1;
int nStart= 0;
int nEnd = n-1;
int mm = 0;
int nn = 0;
int flag = 0;//0右,1下,2左,3上
for(int i = 0 ; i < m*n ; i++){
//添加当前数
list.add(matrix[mm][nn]);
//System.out.println("m:"+mm+",n:"+nn);
//找到下一个数
switch(flag){
case 0:
nn = nn + 1;
if(nn == nEnd){
mStart++;
flag = 1;
}
break;
case 1:
mm = mm+1;
if(mm == mEnd){
nEnd--;
flag = 2;
}
break;
case 2:
nn = nn -1;
if(nn == nStart){
mEnd-- ;
flag = 3;
}
break;
case 3:
mm = mm -1;
if(mm == mStart){
nStart ++;
flag = 0;
}
break;
default:
break;
}
}
return list;
}
}