剑指Offer学习 顺时针打印矩阵

剑指Offer学习

问题

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 x 4矩阵:

1
2
3
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.

理解

因为是按顺时针的顺序打印矩阵中的数字,所以是
先打印出数组的第一行数据(row = 0, col = 0~3),
之后便是打印最后一列的数据(row = 1~3, col = 3),
接着打印最后一行(row = 3, col = 2~0),
打印第一列上(row = 2~1, col = 0)。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> res = new ArrayList<>();
int r1 = 0, r2 = matrix.length - 1;
int c1 = 0, c2 = matrix[0].length - 1;
while(r1 <= r2 && c1 <= c2) {
for(int i = c1; i <= c2; i++)
res.add(matrix[r1][i]);
for(int i = r1 + 1; i <= r2; i++)
res.add(matrix[i][c2]);
if(r1 != r2)
for(int i = c2 - 1; i >= c1; i--)
res.add(matrix[r2][i]);
if(c1 != c2)
for(int i = r2 - 1; i > r1; i--)
res.add(matrix[i][c1]);
r1++; r2--; c1++; c2--;
}
return res;
}
}
------------- 本 文 结 束 感 谢 您 的 阅 读 -------------
坚持原创技术分享,您的支持将鼓励我继续创作!
0%