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:
Given the following matrix:
[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]
You should return
Solution:
2D image transformation.
[1,2,3,6,9,8,7,4,5].
public class Solution {
public ArrayList spiralOrder(int[][] matrix) {
ArrayList ret = new ArrayList();
int m = matrix.length;
if(m == 0) return ret;
int n = matrix[0].length;
int k = Math.min(m,n);
int layer = 0;
for( ;layer < k/2; layer++){
for(int j = layer; j < n - 1 - layer; j++) { ret.add(matrix[layer][j]);}
for(int i = layer; i < m - 1 - layer; i++) { ret.add(matrix[i][n-1-layer]); }
for(int j = n - 1 - layer; j > layer; j--) { ret.add(matrix[m-1-layer][j]); }
for(int i = m - 1 - layer; i > layer; i--) { ret.add(matrix[i][layer]); }
}
if(k % 2 != 0){
if(m <= n) for(int j = layer; j <= n - 1 - layer; j++) ret.add(matrix[layer][j]);
if(m > n) for(int i = layer; i <= m - 1 - layer; i++) ret.add(matrix[i][n-1-layer]);
}
return ret;
}
}
No comments:
Post a Comment