Spiral Order Print II
public class Solution {
public List<Integer> spiral(int[][] matrix) {
List<Integer> result = new ArrayList<>();
int m = matrix.length;
if (m == 0) return result;
int n = matrix[0].length;
int left = 0;
int right = n - 1;
int up = 0;
int down = m - 1;
while (left < right && up < down){
//top side
for (int i = left; i <= right; i++){
result.add(matrix[up][i]);
}
//right side
for (int i = up + 1; i < down; i++){
result.add(matrix[i][right]);
}
//bottom side
for (int i = right; i >= left; i--){
result.add(matrix[down][i]);
}
//left side
for (int i = down - 1; i > up; i--){
result.add(matrix[i][left]);
}
left++;
right--;
up++;
down--;
}
//base cases
//nothing left
if (left > right || up > down) return result;
//one column left
if (left == right){
for (int i = up; i <= down; i++){
result.add(matrix[i][left]);
}
return result;
} else { //one row left
for (int i = left; i <= right; i++){
result.add(matrix[up][i]);
}
return result;
}
}
}Last updated