54. Spiral Matrix
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> ans = new ArrayList<>();
if (matrix == null || matrix.length == 0 || matrix[0].length == 0) return ans;
int n = matrix.length, m = matrix[0].length;
int rowBegin = 0, rowEnd = n - 1;
int colBegin = 0, colEnd = m - 1;
while (rowBegin <= rowEnd && colBegin <= colEnd){
// go right
if (rowBegin <= rowEnd && colBegin <= colEnd){
for (int i = colBegin; i <= colEnd; i++){
ans.add(matrix[rowBegin][i]);
}
}
rowBegin++;
// go down
if (rowBegin <= rowEnd && colBegin <= colEnd){
for (int i = rowBegin; i <= rowEnd; i++){
ans.add(matrix[i][colEnd]);
}
}
colEnd--;
// go left
if (rowBegin <= rowEnd && colBegin <= colEnd){
for (int i = colEnd; i >= colBegin; i--){
ans.add(matrix[rowEnd][i]);
}
}
rowEnd--;
// go up
if (rowBegin <= rowEnd && colBegin <= colEnd){
for (int i = rowEnd; i >= rowBegin; i--){
ans.add(matrix[i][colBegin]);
}
}
colBegin++;
}
return ans;
}
}
59. Spiral Matrix II
class Solution {
public int[][] generateMatrix(int n) {
int[][] board = new int[n][n];
int rowBegin = 0, rowEnd = n - 1;
int colBegin = 0, colEnd = n - 1;
int tracker = 1;
while (rowBegin <= rowEnd && colBegin <= colEnd){
// go right
if (rowBegin <= rowEnd && colBegin <= colEnd){
for (int i = colBegin; i <= colEnd; i++){
board[rowBegin][i] = tracker++;
}
}
rowBegin++;
// go down
if (rowBegin <= rowEnd && colBegin <= colEnd){
for (int i = rowBegin; i <= rowEnd; i++){
board[i][colEnd] = tracker++;
}
}
colEnd--;
// go left
if (rowBegin <= rowEnd && colBegin <= colEnd){
for (int i = colEnd; i >= colBegin; i--){
board[rowEnd][i] = tracker++;
}
}
rowEnd--;
// go up
if (rowBegin <= rowEnd && colBegin <= colEnd){
for (int i = rowEnd; i >= rowBegin; i--){
board[i][colBegin] = tracker++;
}
}
colBegin++;
}
return board;
}
}