public class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
ArrayList<Integer> res = new ArrayList<Integer> ();
if (matrix.length==0) return res;
int m = matrix.length;
int n = matrix[0].length;
order(matrix, m, n, 0, res);
return res;
}
public void order(int[][] matrix, int m, int n, int k, ArrayList<Integer> res) {
if (m<=0 || n<=0) return;
if (m==1) {
for (int j=0; j<n; j++) {
res.add(matrix[k][k+j]);
}
return;
}
if (n==1) {
for (int i=0; i<m; i++) {
res.add(matrix[k+i][k]);
}
return;
}
//to right
for (int j=0; j<n-1; j++) {
res.add(matrix[k][k+j]);
}
//to down
for (int i=0; i<m-1; i++) {
res.add(matrix[k+i][n-1+k]);
}
//to left
for (int j=0; j<n-1; j++) {
res.add(matrix[m-1+k][n-1+k-j]);
}
//to up
for (int i=0; i<m-1; i++) {
res.add(matrix[m-1+k-i][k]);
}
order(matrix, m-2, n-2, k+1, res);
}
}
没有评论:
发表评论