class Solution {
public int[] spiralOrder(int[][] matrix) {
if (matrix==null || matrix.length==0)
return new int[0];
int i = 0;
int j = 0;
int[][] index = new int[matrix.length][matrix[0].length];
int[] arr = new int[matrix.length * matrix[0].length];
int ind = 0;
while (true) {
int flag = 0;
while (j < matrix[0].length && index[i][j] == 0) {
index[i][j] = 1;
arr[ind++] = (matrix[i][j++]);
flag = 1;
}
j--;
i++;
while (i < matrix.length && index[i][j] == 0) {
index[i][j] = 1;
arr[ind++] = (matrix[i++][j]);
if (flag == 1)
flag = 2;
}
i--;
j--;
while (j >= 0 && index[i][j] == 0) {
index[i][j] = 1;
arr[ind++] = (matrix[i][j--]);
if (flag == 2)
flag = 3;
}
j++;
i--;
while (i >= 0 && index[i][j] == 0) {
index[i][j] = 1;
arr[ind++] = (matrix[i--][j]);
if (flag == 3)
flag = 4;
}
i++;
j++;
if (flag != 4)
break;
}
return arr;
}
}
09-03
259

10-27
253

11-10
302

04-30
1158

05-03
971
