Update 29. 顺时针打印矩阵.md

题目链接改为力扣中的对应题目,题目描述和代码按该题的接口调整。
This commit is contained in:
CyC2018
2026-10-28 13:45:04 +08:00
parent d91f3fd377
commit 984936e1f4
+29 -15
View File
@@ -2,7 +2,7 @@
## 题目链接
[牛客网](https://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a?tpId=13&tqId=11172&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking&from=cyc_github)
[Leetcode](https://leetcode.cn/problems/shun-shi-zhen-da-yin-ju-zhen-lcof/)
## 题目描述
@@ -19,25 +19,39 @@
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/image-20201104010609223.png" width="500px"> </div><br>
```java
public ArrayList<Integer> printMatrix(int[][] matrix) {
ArrayList<Integer> ret = new ArrayList<>();
int r1 = 0, r2 = matrix.length - 1, c1 = 0, c2 = matrix[0].length - 1;
public int[] spiralArray(int[][] array) {
if (array == null || array.length == 0 || array[0].length == 0) {
return new int[0];
}
int m = array.length, n = array[0].length;
int[] ret = new int[m * n];
int idx = 0;
int r1 = 0, r2 = m - 1, c1 = 0, c2 = n - 1;
while (r1 <= r2 && c1 <= c2) {
// 上
for (int i = c1; i <= c2; i++)
ret.add(matrix[r1][i]);
for (int i = c1; i <= c2; i++) {
ret[idx++] = array[r1][i];
}
// 右
for (int i = r1 + 1; i <= r2; i++)
ret.add(matrix[i][c2]);
if (r1 != r2)
for (int i = r1 + 1; i <= r2; i++) {
ret[idx++] = array[i][c2];
}
if (r1 != r2) {
// 下
for (int i = c2 - 1; i >= c1; i--)
ret.add(matrix[r2][i]);
if (c1 != c2)
for (int i = c2 - 1; i >= c1; i--) {
ret[idx++] = array[r2][i];
}
}
if (c1 != c2) {
// 左
for (int i = r2 - 1; i > r1; i--)
ret.add(matrix[i][c1]);
r1++; r2--; c1++; c2--;
for (int i = r2 - 1; i > r1; i--) {
ret[idx++] = array[i][c1];
}
}
r1++;
r2--;
c1++;
c2--;
}
return ret;
}