54 Spiral Matrix
https://leetcode.com/problems/spiral-matrix/
class Solution {
List<Integer> ans = new ArrayList<>();
public List<Integer> spiralOrder(int[][] matrix) {
int m = matrix.length;
int n = matrix[0].length;
collect(matrix, 0, n-1, m-1, 0);
return ans;
}
private void collect(int[][] matrix, int urow, int rcol, int drow, int lcol) {
if (lcol > rcol || urow > drow) {
return;
}
if (lcol == rcol) {
for (int i = urow; i <= drow; i++) {
ans.add(matrix[i][lcol]);
}
return;
} else if (urow == drow) {
for (int i = lcol; i <= rcol; i++) {
ans.add(matrix[urow][i]);
}
return;
}
// row is up
for (int i = lcol; i < rcol; i++) {
ans.add(matrix[urow][i]);
}
// col is right
for (int i = urow; i < drow; i++) {
ans.add(matrix[i][rcol]);
}
// row is down
for (int i = rcol; i > lcol; i--) {
ans.add(matrix[drow][i]);
}
// col is left
for (int i = drow; i > urow; i--) {
ans.add(matrix[i][lcol]);
}
collect(matrix, urow+1, rcol-1, drow-1, lcol+1);
}
}
Last updated