JZ19 顺时针打印矩阵
描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵:
[[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16]]
则依次打印出数字
[1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10]
示例1
输入:[[1,2],[3,4]]
返回值:[1,2,4,3]
思路
如下图,要这样循环打印数组元素,可以看成 打印不同外圈的元素。因为横竖左右都有限定并且循环方向也一直在变,所以需要四个变量r1, rows, c1, cols界定循环边缘。
每一个外圈打印规则是:先➡打印上面那一行,⬇ 打印右边一列,⬅打印下面一行,⬆ 打印左边一列。每次打印完一行或者一列后,其界定变量要跟着变化(+1或者-1,为了不重复打印拐角元素)。对于下面一行和左边一列,要判断行列的界定元素不相等,否则就会重复。
解答
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
int rows = matrix.length;
int cols = matrix[0].length;
ArrayList<Integer> arr = new ArrayList<>();
int r1 = 0,c1 =0;
while (r1<=rows-1 && c1 <= cols-1){
// ➡打印上面一行
for (int j=c1;j<cols;j++){
arr.add(matrix[r1][j]);
}
r1++;
// ⬇ 打印右边一列
for (int i = r1;i<rows;i++){
arr.add(matrix[i][cols-1]);
}
rows--;
//⬅打印下面一行
if(r1!=rows+1) {
for (int j = cols - 2; j >= c1; j--) {
arr.add(matrix[rows][j]);
}
cols--;
}
//⬆ 打印左边一列
if(c1!=cols) {
for (int i = rows - 1; i >= r1; i--) {
arr.add(matrix[i][c1]);
}
c1++;
}
}
return arr;
}
}
本文来自博客园,作者:klaus08,转载请注明原文链接:https://www.cnblogs.com/klaus08/p/15105006.html