描述:
给你一个 m
行 n
列的矩阵 matrix
,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
思路:
可以把旋转一次后剩下的矩阵看作是相同的子问题。最小的矩阵是22或1n或n*1。旋转的次数为行数列数中的最小值除以二加上余数,每次旋转都最多二行两列,有可能一行或一列要判断一下。
Java代码:
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> list=new ArrayList<Integer>();
int m=matrix.length;
int n=matrix[0].length;
boolean raw[]=new boolean[m];
boolean col[]=new boolean[n];
for(int i=0;i<m;i++){
raw[i]=false;
}
for(int i=0;i<n;i++){
col[i]=false;
}
int cnt=(m>n)?n:m;
cnt=cnt/2+cnt%2;
for(int i=0;i<cnt;i++){
for(int j=0+i;j<n-i;j++){
list.add(matrix[i][j]);
}
for(int j=i+1;j<m-i-1;j++){
list.add(matrix[j][n-i-1]);
}
if(m-i-1!=i){
for(int j=n-i-1;j>=i;j--){
list.add(matrix[m-1-i][j]);
}
}
if(n-i-1!=i){
for(int j=m-i-2;j>i;j--){
list.add(matrix[j][i]);
}
}
}
return list;
}
}