Untitled
user_6837451
java
2 years ago
1.3 kB
9
Indexable
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
final var result = new ArrayList<Integer>();
spiralOrder(matrix, 0, 0, matrix.length - 1, matrix[0].length - 1, 't', result);
return result;
}
private void spiralOrder(
int[][] matrix,
int fromRow,
int fromCol,
int toRow,
int toCol,
char edge,
List<Integer> result) {
if (fromRow > toRow || fromCol > toCol) {
return;
}
if (edge == 't') {
for (int i = fromCol; i <= toCol; i++) {
result.add(matrix[fromRow][i]);
}
spiralOrder(matrix, fromRow + 1, fromCol, toRow, toCol, 'r', result);
return;
}
if (edge == 'r') {
for (int i = fromRow; i <= toRow; i++) {
result.add(matrix[i][toCol]);
}
spiralOrder(matrix, fromRow, fromCol, toRow, toCol - 1, 'b', result);
return;
}
if (edge == 'b') {
for (int i = toCol; i >= fromCol; i--) {
result.add(matrix[toRow][i]);
}
spiralOrder(matrix, fromRow, fromCol, toRow - 1, toCol, 'l', result);
return;
}
for (int i = toRow; i >= fromRow; i--) {
result.add(matrix[i][fromCol]);
}
spiralOrder(matrix, fromRow, fromCol + 1, toRow, toCol, 't', result);
}
}
Editor is loading...