JZ19-顺时针打印矩阵
顺时针打印矩阵
https://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a?tpId=13&tags=&title=&diffculty=0&judgeStatus=0&rp=1&tab=answerKey
class Solution {
public ArrayList<Integer> printMatrix(int[][] matrix) {
if (matrix == null || matrix.length == 0) {
return null;
}
if (matrix[0].length == 0) {
return null;
}
ArrayList<Integer> list = new ArrayList<>();
int minM = 0; //M行
int minN = 0; //N列
int maxM = matrix.length - 1;
int maxN = matrix[0].length - 1;
while (minM <= maxM && minN <= maxN) {
for (int i = minN; i <= maxN; i++) { //上边
list.add(matrix[minM][i]);
}
for (int i = minM + 1; i <= maxM; i++) { //右边 //如果测试案例只有一行数据minM = maxM。。。i = minM + 1>maxM根本不会执行
list.add(matrix[i][maxN]);
}
if (minM != maxM) { //如果只有一行,既minM = maxM 不需要执行此步。。不然上下边重合会计算两次 //下边
for (int i = maxN - 1; i >= minN; i--) {
list.add(matrix[maxM][i]);
}
}
if (minN != maxN) { // 左边 同要判断
for (int i = maxM - 1; i > minM; i--) { //最后一处要空出一行
list.add(matrix[i][minN]);
}
}
minM++;
minN++;
maxM--;
maxN--;
}
return list;
}
} 