https://leetcode.com/problems/spiral-matrix/
解决方法很简单,由顶、右、底、左外边界逐步向里遍历矩阵,将元素置入结果矩阵返回即可。
代码如下,要注意,对于不规则的矩阵(m != n),要避免重复元素,需要加一次check。
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> res = new ArrayList<>();
if (matrix.length == 0) return res;
int m = matrix.length;
int n = matrix[0].length;
int rowUp = 0;
int rowDown = m - 1;
int columnLeft = 0;
int columnRight = n - 1;
while (rowUp <= rowDown && columnLeft <= columnRight) {
for (int i = columnLeft; i <= columnRight; i++) {
res.add(matrix[rowUp][i]);
}
rowUp++;
for (int j = rowUp; j <= rowDown; j++) {
res.add(matrix[j][columnRight]);
}
columnRight--;
// 对于不规则矩阵,因为上面rowUp和columnRight都已经挪动,可能导致check条件已经相等,应该退出循环,所以这里重新check一下退出条件。
if (rowUp <= rowDown && columnLeft <= columnRight) {
for (int i = columnRight; i >= columnLeft; i--) {
res.add(matrix[rowDown][i]);
}
rowDown--;
for (int j = rowDown; j >= rowUp; j--) {
res.add(matrix[j][columnLeft]);
}
columnLeft++;
}
}
return res;
}