听说头条笔试特别喜欢考顺时针打印矩阵,正好LeetCode上有一道类似的题LeetCode---54. Spiral Matrix,题目描述如下:
这道题的Discuss区的高票答案特别的简洁易懂,特此分享一下:
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> res = new ArrayList<>();
if(matrix == null || 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 i = colBegin; i <= colEnd; ++i) {
res.add(matrix[rowBegin][i]);
}
rowBegin++;
// Traverse Down
for(int i = rowBegin; i <= rowEnd; ++i) {
res.add(matrix[i][colEnd]);
}
colEnd--;
// Traverse Left
if(rowBegin <= rowEnd) {
for(int i = colEnd; i >= colBegin; i--) {
res.add(matrix[rowEnd][i]);
}
rowEnd--;
}
// Traver Up
if(colBegin <= colEnd) {
for(int i = rowEnd; i >= rowBegin; i--) {
res.add(matrix[i][colBegin]);
}
colBegin++;
}
}
return res;
}
}