Open songyy5517 opened 1 year ago
思路:循环 & 按方向分情况讨论
复杂度分析:
res
为必须使用的空间)。import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
// 思路:分类讨论(打印方向 & 打印范围)
if (matrix == null || matrix.length == 0 || matrix[0].length == 0)
return new ArrayList();
int row_start = 0, col_start = 0;
int row_end = matrix.length;
int col_end = matrix[0].length;
ArrayList<Integer> res = new ArrayList();
while (row_start <= row_end - 1 && col_start <= col_end - 1){
// 向右打印
for (int i = col_start; i < col_end; i++){
res.add(matrix[row_start][i]);
}
if (++ row_start >= row_end)
break;
// 向下打印
for (int i = row_start; i < row_end; i++)
res.add(matrix[i][col_end - 1]); // !col不能放在前面
if (col_start >= --col_end)
break;
// 向左打印
for (int i = col_end - 1; i >= col_start; i--)
res.add(matrix[row_end - 1][i]);
if (row_start >= --row_end)
break;
// 向上打印
for (int i = row_end - 1; i >= row_start; i--)
res.add(matrix[i][col_start]);
if (++col_start >= col_end)
break;
}
return res;
}
}
2023/2/24:
2023/10/4 2023/10/5
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 1:
示例 2: