给定 m × n 个元素的矩阵( m 行, n 列),以螺旋顺序返回矩阵的所有元素。
例如, 给定以下矩阵:
[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
你应该返回[1, 2, 3, 6, 9, 8, 7, 4, 5]。
解题思路:
- 这道题本身不难,考虑好循环结束的条件即可
- 同时需要考虑到临界情况
代码如下:
public ArrayList<Integer> spiralOrder(int[][] matrix) {
ArrayList<Integer> list = new ArrayList<>();
if(matrix == null || matrix.length == 0 || matrix[0].length == 0)
return list;
int row = matrix.length - 1;
int col = matrix[0].length - 1;
int rowbegin = 0;
int colbegin = 0;
while(rowbegin <= row && colbegin <= col){
// 从左向右打印,同时改变边界值
for(int i = colbegin; i <= col; i++) list.add(matrix[rowbegin][i]);
rowbegin++;
// 从上向下打印,同时改变边界值
for(int i = rowbegin; i <= row; i++) list.add(matrix[i][col]);
col--;
// 这里的判断条件是判断行数而不是列数,为什么?
// 因为这里结束之后,需要改变边界值 row,故需要做判断
if(rowbegin <= row){
for(int i = col; i >= colbegin; i--) list.add(matrix[row][i]);
}
row--;
if(colbegin <= col){
for(int i = row; i >= rowbegin; i--) list.add(matrix[i][colbegin]);
}
colbegin++;
}
return list;
}