题解 | #螺旋矩阵#
螺旋矩阵
https://www.nowcoder.com/practice/7edf70f2d29c4b599693dc3aaeea1d31
import java.util.ArrayList; public class Solution { public ArrayList<Integer> spiralOrder(int[][] matrix) { if (matrix == null) return null; ArrayList<Integer> res = new ArrayList<>(); if (matrix.length == 0) return res; int top = 0; int bottom = matrix.length - 1; int left = 0; int right = matrix[0].length - 1; while (top <= bottom && left <= right) { // left top -> right top for (int i = left; i <= right; i++) { res.add(matrix[top][i]); } top++; // right top -> right bottom for (int i = top; i <= bottom; i++) { res.add(matrix[i][right]); } right--; // 奇数行、偶数列的时候有问题 if (top > bottom || left > right) break; // right bottom -> left bottom for (int i = right; i >= left; i--) { res.add(matrix[bottom][i]); } bottom--; // left bottom -> left top for (int i = bottom; i >= top; i--) { res.add(matrix[i][left]); } left++; } return res; } }
解题思想:确定四个边界值,主键缩小边界值,注意特殊情况的奇数行偶数列需要特殊处理。
#算法##算法笔记#