https://leetcode.com/problems/spiral-matrix/#/description
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
For example,
Given the following matrix:
[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]
You should return [1,2,3,6,9,8,7,4,5]
.
Java Code:
package go.jacob.day626;
import java.util.ArrayList;
import java.util.List;
public class Demo1 {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> res = new ArrayList<Integer>();
if (matrix.length == 0) {
return res;
}
int rowBegin = 0;
int rowEnd = matrix.length-1;
int colBegin = 0;
int colEnd = matrix[0].length - 1;
while (rowBegin <= rowEnd && colBegin <= colEnd) {
// Traverse Right
for (int j = colBegin; j <= colEnd; j ++) {
res.add(matrix[rowBegin][j]);
}
rowBegin++;
// Traverse Down
for (int j = rowBegin; j <= rowEnd; j ++) {
res.add(matrix[j][colEnd]);
}
colEnd--;
if (rowBegin <= rowEnd) {
// Traverse Left
for (int j = colEnd; j >= colBegin; j --) {
res.add(matrix[rowEnd][j]);
}
}
rowEnd--;
if (colBegin <= colEnd) {
// Traverse Up
for (int j = rowEnd; j >= rowBegin; j --) {
res.add(matrix[j][colBegin]);
}
}
colBegin ++;
}
return res;
}
/*
* Runtime: 3 ms Your runtime beats 25.14 % of java submissions.
*
*/
public List<Integer> spiralOrder_1(int[][] matrix) {
List<Integer> res = new ArrayList<Integer>();
if (matrix == null || matrix.length < 1 || matrix[0].length < 1)
return res;
int rows = matrix.length;
int cols = matrix[0].length;
int min = Math.min(rows, cols);
int begin = 0;
while (begin < (min + 1) / 2) {
for (int i = begin; i < cols - begin; i++) {
res.add(matrix[begin][i]);
}
for (int i = begin + 1; i < rows - begin; i++) {
res.add(matrix[i][cols - 1 - begin]);
}
for (int i = cols - 2 - begin; i >= begin && begin < rows - 1 - begin; i--) {
res.add(matrix[rows - 1 - begin][i]);
}
for (int i = rows - 2 - begin; i > begin && begin < cols - 1 - begin; i--) {
res.add(matrix[i][begin]);
}
begin++;
}
return res;
}
}