题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数 字,例如,如果输入如下4X4矩阵:12345678910111213141516则依次 打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
思路:按层模拟:终止行号大于起始行号,终止列号大于起始列号。
package Function;
import java.util.ArrayList;
import java.util.List;
public class spiralOrder29 {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> res = new ArrayList<>();
if (matrix == null || matrix.length == 0) {
return res;
}
//行
int r1 = 0, r2 = matrix.length - 1;
//列
int c1 = 0, c2 = matrix[0].length - 1;
while (r1 <= r2 && c1 <= c2) {
// 从 左 往 右
for (int c = c1; c <= c2; c++) {
res.add(matrix[r1][c]);
}
// 从 上 往 下
for (int r = r1 + 1; r <= r2; r++) {
res.add(matrix[r][c2]);
}
// 判 断 是 否 会 重 复 打 印
if (r1 < r2 && c1 < c2) {
// 从 右 往 左
for (int c = c2 - 1; c > c1; c--) {
res.add(matrix[r2][c]);
}
// 从 下 往 上
for (int r = r2; r > r1; r--) {
res.add(matrix[r][c1]);
}
}
r1++;
r2--;
c1++;
c2--;
}
return res;
}
}
来源:CSDN
作者:LuckyAsYou
链接:https://blog.csdn.net/qq_36113761/article/details/104638017